1 递归: 调用自己的时候 必须说明 什么时候不调了
递归本身就是一个耗时 耗空间的做法
2 递归如果没有指定 退出条件时,造成内存溢出原因:
调用自己的时, 老方法没有执行完,而在老方法调用自己时,需要开一个新方法的空间,
然后新方法在方法体内调用自己的时候,还没有执行完,因此又开启一个新芯方法空间,就这样
不断的开辟新空间占用内存,最终把内存吃没, 见下图解释
3 简单的递归代码 :
public class Test { static int a = 0; public static void main(String[] args) { test1(); } private static void test1() { System.out.println("我是递归函数 + " + a); a++; if(a<10) { test1(); // 自己调用自己 并且 有退出条件 }else{ System.out.println("递归结束"); } } }
4 递归实现阶乘 :
private static int factorial(int n) { if(n==1) { return 1; // 自己调用自己 并且 有退出条件 }else{ return n * factorial(n-1); } }
3 使用递归 打印文件树 :
public static void main(String[] args) {
//test1();
//System.out.println(factorial(5));
//int[] value = {3,1,6,2,9};
//sort(value);
File file = new File("D:/大数据电子书");
treefileshow(file,0);
}
private static void treefileshow(File file, int level) {
// 递归体 ---- 展示要执行的内容 , 无论如何都要执行的内容
for(int i=0 ; i< level; i++){
System.out.print("-");
}
System.out.println(file.getName());
// 递归头 ---- 有跳出条件
if(file.isDirectory()){
File[] files = file.listFiles();
for(File child : files) {
treefileshow(child,level+1);
}
}
}