递归例题(斐波那契不死神兔案例&遍历指定目录下所有的指定后缀名文件名称&递归删除带内容的目录)

本文通过不死神兔问题介绍递归规律,并详细解释如何使用递归遍历指定目录下所有.java文件,以及递归删除带内容的目录的方法。涉及Java编程中的递归操作和文件系统交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    不死神兔案例。
        假设有一对兔子,从出生的第三个月开始,每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子。
        假设所有的兔子都不会死。问题:二十个月后,兔子的对数是多少?

    找规律:
         月份      兔子的对数
         第一个月      1
         第二个月      1
         第三个月      2
         第四个月      3
         第五个月      5
         第六个月      8
         ...

         由此课件,兔子的对数的数据是:
            1,1,2,3,5,8,13,21,34...

         规律:
            1、从第三项开始,每一项都是前两项之和
            2、说明前两项的数据是已知的

package com.shujia.wyh.day22;

public class DiGuiDemo3 {
    public static void main(String[] args) {
    /**
     * 返回值类型:int
     * 参数列表:int i 20
     * <p>
     * 出口条件:第一个月是1,第二个月也是1
     * 递归的条件:从第三个月开始,每一个月的值是前两个月之和
     */
    public static int Fibonacci(int i) {
        //第一个月是1,第二个月也是1
        if (i == 1 || i == 2) {
            return 1;
        } else {
            //从第三个月开始,每一个月的值是前两个月之和
            return Fibonacci(i - 1) + Fibonacci(i - 2);

        }
    }

}

        遍历指定目录下所有的指定后缀名文件名称 E:\\java\\day22

        分析:
            1、将目录封装成File对象
            2、获取该目录下所有的File对象组成的数组
            3、遍历数组得到每一个File对象
            4、判断得到的File对象是一个文件还是一个文件夹
                1、如果他是一个文件夹,回到第二步
                2、如果他是一个文件,判断文件名称是否以.java后缀
                    如果是,输出
                    不是,跳过

package com.shujia.wyh.day22;

import java.io.File;

public class DiGuiDemo4 {
    public static void main(String[] args) {
        //将目录封装成File对象
        File file = new File("E:\\java\\day22");

        //递归实现
        getJavaFile(file);

    }
    public static void getJavaFile(File file){
        //获取该目录下所有的File对象组成的数组
        File[] files = file.listFiles();

        //遍历数组得到每一个File对象
        for(File f : files){
            //判断是否是一个文件夹
            if(f.isDirectory()){
                getJavaFile(f);
            }else {
                //判断文件名称是否以.java后缀
                if(f.getName().endsWith(".java")){
                    //如果是,输出
                    System.out.println(f.getName());
                }
            }
        }
    }

}

        递归删除带内容的目录

        分析:
            1、获取File对象
            2、获取该目录下所有的文件和文件夹组成的File对象数组
            3、遍历数组得到每一个File对象
            4、判断这个File对象是否是文件夹
                是:返回第二步
                不是:直接删除

package com.shujia.wyh.day22;

import java.io.File;

public class DiGuiDemo5 {
    public static void main(String[] args) {
        File file = new File("D:\\IdeaProjects\\bigdata15\\aaa");

        deleteFile(file);
    }

    public static void deleteFile(File file) {
        //获取该目录下所有的文件和文件夹组成的File对象数组
        File[] files = file.listFiles();

        if (files != null) {
            //遍历数组得到每一个File对象
            for (File f : files) {
                //判断这个File对象是否是文件夹
                if (f.isDirectory()) {
                    deleteFile(f);
                } else {
                    System.out.println(f.getName() + "---" + f.delete()); //删除aaa下的内容
                }
            }
            System.out.println(file.getName() + "---" + file.delete()); //删除aaa文件夹
        }

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值