递归:方法定义中调用方法本身 如果是方法的嵌套调用 这不是递归
基本思想就是“自己调用自己” 一个使用递归技术的方法将会直接或者间接的调用自己
几个应注意的点:
递归一定要有出口否则就是死递归
递归的次数不能太多 否则就内存溢出
构造方法不能递归使用
例:
public classDiGuiDemo {//public DiGuiDemo() {//DiGuiDemo();//}
}
递归求n的阶乘
public classDiGuiDemo {public static voidmain(String[] args) {int jc = 1;for (int x = 2; x <= 5; x++) {
jc*=x;
}
System.out.println("5的阶乘是:" +jc);
System.out.println("5的阶乘是:"+jieCheng(5));
}/** 做递归要写一个方法:
* 返回值类型:int
* 参数列表:int n
* 出口条件:
* if(n == 1) {return 1;}
* 规律:
* if(n != 1) {return n*方法名(n-1);}*/
public static int jieCheng(intn){if(n==1){return 1;
}else{return n*jieCheng(n-1);
}
}
}
有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第二十个月的兔子对数为多少?
分析:我们要想办法找规律 兔子对数
第一个月: 1
第二个月: 1
第三个月: 2
第四个月: 3
第五个月: 5
第六个月: 8
由此可见兔子对象的数据是: 1,1,2,3,5,8...
从第三项开始,每一项是前两项之和
public static int fib(intn) {if (n == 1 || n == 2) {return 1;
}else{return fib(n - 1) + fib(n - 2);
}
}
}
把E:\JavaSE目录下所有的java结尾的文件的绝对路径给输出在控制台
private static voidgetAllJavaFilePaths(File srcFolder) {//获取该目录下所有的文件或者文件夹的File数组
File[] fileArray =srcFolder.listFiles();//遍历该File数组,得到每一个File对象
for(File file : fileArray) {//判断该File对象是否是文件夹
if(file.isDirectory()) {
getAllJavaFilePaths(file);
}else{//继续判断是否以.java结尾
if (file.getName().endsWith(".java")) {//就输出该文件的绝对路径
System.out.println(file.getAbsolutePath());
}
}
}
}