递归
什么是递归?
递归其实就是方法自己调用自己
递归分为两种
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)
}
}

浙公网安备 33010602011771号