递归

什么是递归?

递归其实就是方法自己调用自己

递归分为两种

1、直接递归

public static void main(String[] args){
	a(); // 直接自己调用自己
}
public static void a(){
	a();
}

2、间接递归

public static void main(String[] args){
	a();// 通过b方法调用a方法
}
public static void a(){
	b();
}
public static void b(){
	a();
}

递归的注意事项

1、递归必须要有条件限制,用来保证递归能够停止下来,否则会发生栈内存溢出
2、在递归中虽然有条件限制,但是递归次数不能太多。否则也会发生栈内存溢出
3、构造方法禁止使用递归,编译的时候就会报错

递归累加求和

练习要求:

使用递归计算1到n之间的和,请定义一个方法传递一个整数就能计算1到该整数的和

答案如下:

public static void main(String[] args){
	int result = sum(5);
	System.out.println(result);// 得到的结果为15
}
public static int sum(int n){
	// 明确出结束递归的条件
	if(n == 1){
		return 1;
	}
	// 获取下一个被加的数字(n-1)
	return n + sum(n - 1);
}

注意

因为在使用递归的时候会调用很多的方法,所以效率低下

递归打印多级目录

练习需求:

假设c盘下有个文件夹abc
abc中包含abc.txt文件和abc.java文件这两个文件以及a文件夹和b文件夹
a文件夹中包含a.txt文件和a.java
b文件夹中包含b.txt文件和b.java

我们需要递归打印多级目录
打印结果如下
c:\abc
c:\abc\abc.txt
c:\abc\abc.java
c:\abc\a
c:\abc\a\a.jpg
c:\abc\a\a.java
c:\abc\b\b.jpg
c:\abc\b\b.java

答案如下:

public static void main(String[] args){
	File file = new File("c:\\abc");
	getAllFile(file);
}
public static void getAllFile(File dir){
	File[] files = dir.listFiles();
	for( File f: files) {
	//对遍历files集合得到的file对象f进行判断,判断它是否是文件夹
	if(f.isDirectory){
		// 判断的出f为文件夹
		// 我们发现getAllFile方法就是传递文件夹,遍历文件夹的方法
		// 所以我们直接调用getAllFile方法
		getAllFile(f)
	}else{
		// f是一个文件,直接打印输出
		System.out.println(f)
	}
}
posted @ 2020-10-30 16:33  谢海川  阅读(42)  评论(0)    收藏  举报