算法--方法递归
2016-05-16 10:47
281 查看
方法递归:一个方法体内调用它本身,被称为方法递归。英语是recursive,[rɪˈkɜ:sɪv]。
方法递归包含了一种隐式的循环,它会重复执行某种代码,但这种重复执行无须循环控制。
递归有一条最重要的规定:递归一定要向已知方法递归,否则就是一个死循环。
递归是非常有用的,例如希望遍历某个路径下的所有文件,但这个路径下文件夹的深度是未知的,那么就可以使用递归来实现这个需求。系统可定义一个方法,该方法接受一个
文件路径作为参数,该方法可遍历当前路径下的所有文件和文件路径,该方法中再次调用该方法本身来处理该路径下的所有文件路径。
为了更好的记住递归的规定,下面是2个数学题:
1,已知有一个数列:f(0)=1,f(1)=2,f(n+2)=2*f(n+1)+f(n),其中n是大于0的整数,求f(10)的值;
2,已知有一个数列:f(20)=1,f(21)=2,f(n+2)=2*f(n+1)+f(n),其中n是大于0的整数,求f(10)的值;
方法递归包含了一种隐式的循环,它会重复执行某种代码,但这种重复执行无须循环控制。
递归有一条最重要的规定:递归一定要向已知方法递归,否则就是一个死循环。
递归是非常有用的,例如希望遍历某个路径下的所有文件,但这个路径下文件夹的深度是未知的,那么就可以使用递归来实现这个需求。系统可定义一个方法,该方法接受一个
文件路径作为参数,该方法可遍历当前路径下的所有文件和文件路径,该方法中再次调用该方法本身来处理该路径下的所有文件路径。
为了更好的记住递归的规定,下面是2个数学题:
1,已知有一个数列:f(0)=1,f(1)=2,f(n+2)=2*f(n+1)+f(n),其中n是大于0的整数,求f(10)的值;
2,已知有一个数列:f(20)=1,f(21)=2,f(n+2)=2*f(n+1)+f(n),其中n是大于0的整数,求f(10)的值;
/** * 递归方法测试: * 只要一个方法的方法体内再次调用了方法本身,这就是一个递归方法 * 递归一定要向已知方法递归,否则就是一个死循环 * * @author LinkinPark * */ public class RecursiveTest { public static int test(int n) { if (n == 0) { return 1; } else if (n == 1) { return 2; } else { return 2 * test(n - 1) + test(n - 2); } } public static int test1(int n) { if (n == 20) { return 1; } else if (n == 21) { return 2; } else { // 不可以和上面写成一样,递归一定要向已知的方法递归 return test(n + 2) - 2 * test(n + 1); } } public static void main(String[] args) { // 循环的次数一样,初始值一样,所以最终2次输出结果相同:5741 System.out.println(test(10)); System.out.println(test1(10)); } }
相关文章推荐
- 人脸识别(二)--人脸识别样本制作及训练测试
- 套接字服务端,启动指定客户端 通讯
- 使用Sublime Text搭建python调试环境
- css3阴影box-shadow学习
- PAT (Advanced Level) 1015. Reversible Primes (20)
- linux检测文件夹是否存在
- 编程方式 获取ApplicationContext实例
- 联通公司员工工资存折遭曝光!
- 调用svc报错 httpwebrequest_webexception_remoteserver
- 手动添加Pch全局引用文件
- Tomcat内存配置、参数说明
- Activity的启动方式和flag详解
- LISP
- 一条网址都由哪几部分组成都是什么意思
- 【好程序员特训营】- 路新艺-Java设计模式之简单工厂模式
- postgresql源码包安装
- Win10上 MinGW的安装配置 过程记录
- springmvc学习记录----springmvc的文件上传和下载
- -webkit-tap-highlight-color
- SQL添加删除、查询表、字段说明