递归练习

练习一使用递归计算阶乘

复制代码
public class demg_002Recurison {
    public static void main(String[] args) {
        int sum = sum(5);
        System.out.println(sum);
    }
    /**
     * 使用递归计算阶乖
     * n的阶乘:n!=n*(n-1)*...*3*2*1
     * 5的阶乘:5!=5*(5-1)*(5-2)*(5-3)*(5-4)=5*4*3*2*1
     * 递归的结束条件:
     *      获取到1的时候结束
     * 递归的目的
     *      获取下一个被乘的数(n-1)
     */
    public static int sum(int n){
        if (n==1){
            return 1;
        }
        //获取下一个被加的数字
        return n * sum(n-1);
    }
}
复制代码

运行结果:

 

 

递归计算1-n之间的和

复制代码
public class demg_002Recurison {
    public static void main(String[] args) {
        int sum = sum(100);
        System.out.println(sum);
    }
    public static int sum(int n){
        if (n==1){
            return 1;
        }
        //获取下一个被加的数字
        return n + sum(n-1);
    }
}
复制代码

 

原理图:

 

 

 不理解的可以看下

 

 递归打印多级目录

复制代码
public class demg_002Recurison {
    public static void main(String[] args) {
        File file = new File("E:\\mave\\idea");
        getAllFile(file);
    }

    private static void getAllFile(File dir) {
        File[] files = dir.listFiles();
        for (File file : files) {
            System.out.println(file);
        }
    }
}
复制代码

运行结果:

 

 分析:

  发现遍历的结果并不完全,只有cccc文件夹中的内容,没有子文件夹内容

解决:

   对遍历得到的File对象f进行判眠判断是杏是文件夹

复制代码
public class demg_002Recurison {
    public static void main(String[] args) {
//        int sum = sum(100);
//        System.out.println(sum);
        File file = new File("E:\\mave\\idea");
        getAllFile(file);
    }

    private static void getAllFile(File dir) {
        System.out.println(dir);//打印被遍历的目录名称
        File[] files = dir.listFiles();
        for (File file : files) {
            //对遍历得到的File对象f进行判断,判断是否文件夹
            if (file.isDirectory()){
                getAllFile(file);
            }else {
                System.out.println(file);
            }
        }
    }
复制代码

 

 

 

综合案例文件搜索

搜索某个盘的指定后缀名

分析:

  1.目录搜索,无法判断多少目录,所以使用递归,遍历所有目录

  2.遍历目录时,获取的子文件,通过文件名称,判断是否符合条件

代码实现:

复制代码
public class demg_02Recursion {
    public static void main(String[] args) {
        File file = new File("E:\\Tomcat\\apache-tomcat-9.0.39\\bin");
        getAllFile(file);
    }

    private static void getAllFile(File file) {
        File[] files = file.listFiles();
        for (File file1 : files) {
            //f是一个文件夹,则继绩遍历这个文件夹
            //我们发现getAIlFile方法就是传递文件夹,遍历文件夹的方法
            //所以直接调用getAlIFile方法即可:递归(白己调用自己
            if (file1.isDirectory()){
                getAllFile(file1);
            }else {
                //f是一个文件,直接打印即可
                /**
                 * 只要.java文件
                 * 1、把File对象f。转为字符串对象
                 */
                if (file1.getName().endsWith(".jar")){ //判断里转换字符类型.endsWith(".jar"):只要这个后缀名的文件
                    System.out.println(file1);
                }
            }
        }
    }
}
复制代码

运行结果:

 

posted @   monkey大佬  阅读(43)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示