29.递归

递归的分类:

  1. 直接递归:方法自身调用自己
  2. 间接递归:A方法调用B方法,B方法调用C方法,C方法调用A方法

注意事项:

  • 递归一定要有条件限定,保证递归能够停止下来,否则会发生栈内存溢出
  • 在递归中虽然有限定条件,但是递归次数不能太多,否则也会发生栈内存溢出
  • 构造方法禁止递归(构造方法是创建对象使用的,一直递归会导致内存有无数多个对象)
//使用递归计算1~n之间的和
public int sum(int n){
    if(n==1){
        return 1;
    }
    return n + sum(n-1);
}

//递归计算阶乘
public int jc(int n){
    if(n == 1){
        return 1;
    }
    return n * jc(n-1);
}

//递归打印多级目录
File file = new File("C:\\Java");
getAllFile(file);

public void getAllFile(File dir){
    File[] files = dir.listFiles();
    for(File f : files){
        if(f.isDirectory()){
            getAllFile(f);
        }else{
            //查找以java结尾的文件
            String name = f.getName();
            boolean b = name.endsWith(".java");
            if(b){
                System.out.println(f);
            }
        }
    }
}

public void getAllFile(File dir){
    //传递过滤器对象使用匿名内部类
    File[] files = dir.listFiles(new FileFilter(){
        @Override
        public boolean accept(File pathname){
            //过滤规则,pathname是文件夹或者是.java结尾的文件返回true
            return pathname.isDirectory() || pathname.getName().toLowerCase().endsWith(".java");
        }
    });
    //或者
    File[] files = dir.listFiles(new FilenameFilter(){
        @Override
        public boolean accept(File dir,String name){
            reutrn new File(dir,name).isDirectory() || name.toLowerCase().endsWith(".java");
        }
    })
    
    for(File f : files){
        if(f.isDirectory()){
            getAllFile(f);
        }else{
        	System.out.println(f);
        }
    }
}

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值