二、递归简论-算法
来源:互联网 发布:mac netbeans tomcat 编辑:程序博客网 时间:2024/06/05 08:22
简单定义
1. 当一个函数用它自身来定义的时候就称为递归。
例如:
//java实现public static int fx(int x){ if(x == 0) return 0; else return 2*fx(x-1) + x * x;}
if(x == 0) return 0;
定义了基准情况:这个时候的值可以直接算出,不用递归。若没有这行,则这个函数是没有意义的,将一直没有结果。
//错误的示例public static int errRecur_test(int x){ if( x == 0) return 0; return errRecur_test(x / 3 +1);}
当输入3
→ errRecur_test(2)→ errRecur_test(3)→ errRecur_test(2),一直循环下去。程序卡死。
2.小点总结
递归的前两个基本法则
- 基准情形(base case) 要有基准情形,不用递归就能求解。
- 不断推进(making progress) 递归调用总能够朝着基准情形推进。
3.示例
有一个正整数77862,用递归将其每位逐个打印到控制台
思路:先打印7786,再打印2。想打印7786,就先打印778,再打印6。如此循环,当想打印的是个位数(<10)时,就直接打印,就是基准情况了。看下实现。
public static void printInteger(int i){ //如果i >= 10 接着调用printInteger将前面的数字打印出来 if(i >= 10) printInteger(i / 10); //打印最后一位 //System.out.println(i % 10); //%运算是比较耗时的 System.out.println(i - i / 10 *10);}
4.递归的第三、四个法则
- 设计法则(design rule) 假设所有的递归都能运行。
- 合成效益 在求解一个问题的同一实例时,切勿在不同 的递归调用中做重复性的工作(之后介绍)。
0 0
- 二、递归简论-算法
- 基础算法--递归(二)
- 算法递归简论
- 基础算法之二:递归
- 八大算法思想(二)------------------递归算法
- 二路归并排序算法(递归&非递归)
- 递归算法深入浅出二:递归n的阶乘
- 递归算法简析
- 简析递归算法
- 递归算法简析
- 填充算法(二)优化递归填充算法
- 汉诺塔问题的非递归非堆栈算法(二)
- 统计文件夹和文件个数的递归算法二
- [PFW-EXAM]二路归并的排序算法(递归)
- 二路归并算法非递归C实现
- 排序系列之二堆排序的非递归算法
- 算法交作业之循环和递归(二)
- 重新教自己学算法之循环-递归(二)
- Linux下安装JDK
- dwz跳转jsp及相应后台跳转控制的对应配置
- springMvc基于注解的异常处理
- arcgis_js入门示例一
- 程序流程设计
- 二、递归简论-算法
- 视图 索引 序列 触发器 存储过程
- java直接跳出上层循环(多层循环)
- 权限系统普遍通性,以shrio为例
- 最新版Intellij IDEA插件JRebel 7.0.7安装与激活教程。
- 浏览器渲染ajax动态拼接元素样式失效问
- C#控制台程序,Winform,WPF的区别
- sql迭代 因为parentid is null 要有parentid为null的记录
- 有条件的debug断点