java递归

 

 

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);
			}
		}
		
		
	}

 

 

 

猜你喜欢

转载自chengjianxiaoxue.iteye.com/blog/2396322
今日推荐