【JAVA基础-递归】

递归定义

在方法中调用方法本身

public static void main(String[] args) {
        long f = f(5);
        System.out.println(f);
    }
    public static long f(int n){
        if(n==1){
            return 1;
        }
        return n*f(n-1);
    }

注意: 我们在适用递归过程中一定要保证递归能结束,不能无限递归下去,不然会出现栈溢出情况(StackOverflowError)。如果一个问题既可以用递归又可以用循环解决时,用循环解决问题。

练习

   /*
    练习1:不死兔
    有一对兔子,从出生后第三个月气每个月生一对兔子,
    小兔子长到第三个月后又开始生一对兔子,
    加入兔子都不死,问第十二个月兔子的对数为多少?
    1 1 2 3 5 8 13 21......
    第三个月起 f(n)=f(n-1)+f(n-2)  n表示月份
     */
    public static long f1(int n){
        if(n<=2){
            return 1;
        }
        return f1(n-1)+f1(n-2);
    }

    /*
    练习2:
    递归删除一个文件夹,因为删除的文件夹必须是空的
    需要先遍历问价夹内文件并且删除后,才能删除文件夹
    文件内如果存在文件夹,需要递归解决
     */
      public static void dirDelete(String path){
        File dir = new File(path);
        if(dir.exists()&&dir.isDirectory()){ //如果文件存在且是一个文件夹
            File[] files = dir.listFiles();
            for (File file : files) {
                if(file.isFile()){
                    file.delete();
                }else{
                    dirDelete(file.getAbsolutePath());
                }
            }
            dir.delete();
        }
     }
   /*
    练习3:
    递归求文件夹大小
    需要遍历文件夹内文件大小,文件夹内如果出现文件夹
    需要用到递归
     */
      public static long f3(String path){
        long size = 0;
        File dir = new File(path);
        if(dir.exists()&&dir.isDirectory()){
            File[] files = dir.listFiles();
            for (File file : files) {
                if(file.isFile()){
                    size +=file.length();
                }else {
                    size +=f3(file.getAbsolutePath());
                }
            }
        }
        return size;
    }
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值