递归

递归

方法的递归:方法定义中调用方法本身的现象

package com.shujia.day14;

/*
    new StringBuffer().append().append()  这个叫方法的链式调用

    show(fun1()) 方法的嵌套调用

    递归必备前提:
        1、进入递归的入口
        2、方法要有返回值
        3、结束递归的出口(如果没有出口就是死递归)

    案例1:
        从前有座山,山里有座庙,庙里有个老和尚,老和尚在给小和尚讲故事:n1
            从前有座山,山里有座庙,庙里有个老和尚,老和尚在给小和尚讲故事: n2
                从前有座山,山里有座庙,庙里有个老和尚,老和尚在给小和尚讲故事: n3
                    从前有座山,山里有座庙,庙里有个老和尚,老和尚在给小和尚讲故事: n4
                        从前有座山,山里有座庙,庙里有个老和尚,老和尚在给小和尚讲故事: n5
                        ... n*
         设置出口(结束条件):老和尚圆寂了,山倒了。

    案例2:
        学习大数据,为了找工作,为了赚钱,为了娶媳妇,为了生娃:
            学习大数据,为了找工作,为了赚钱,为了娶媳妇,为了生娃:
                学习大数据,为了找工作,为了赚钱,为了娶媳妇,为了生娃:
                    学习大数据,为了找工作,为了赚钱,为了娶媳妇,为了生娃:
                    ...A
        设置出口(结束条件):娶不到媳妇。

    需求:求5的阶乘
 */

public class DiGuiDemo1 {
    public static void main(String[] args) {
        System.out.println(jieCheng(5));

        for (int i = 1; i < 10; i++) {
            System.out.println(i);
        }
    }

//    public static void fun1(){
//        fun1();
//    }

    // 5! = 5*4*3*2*1;
    public static int jieCheng(int number) {
        //结束条件
        if (number == 1) {
            return 1;
        } else {
            return number * jieCheng(--number);
        }

//        return number * jieCheng(--number);// OOM (out of memory)
    }
}

递归与File的结合练习1

package com.shujia.day15;
import java.io.File;
/*
    递归遍历E:\\目录下指定后缀名结尾的文件名称
    递归方法的前提:
        1、要有入口
        2、方法要有返回值(看情况)
        3、要有出口

   分析:
    1、将E盘封装成File对象
    2、获取当前目录下所有的文件或者文件夹组成的File对象数组
    3、挨个遍历每一个File对象
        1)如果是一个文件,且是以.java后缀的,那就输出
        2)如果是一个文件夹,回到第2步

 */
public class DiGuiTest1 {
    public static void main(String[] args) {
        File file = new File("E:\\");

        show(file);

    }
    public static void show(File file){
        //获取当前目录下所有的文件或者文件夹组成的File对象数组
        File[] files = file.listFiles();

        //挨个遍历每一个File对象
        if(files!=null){
            for (File file1 : files) {
                if(file1.isFile() && file1.getName().endsWith(".java")){
                    System.out.println(file1.getName());
                }else {
                    show(file1);
                }
            }
        }
    }
}

递归与File的结合练习2

package com.shujia.day15;
import java.io.File;
/*
    递归删除带内容的目录 E:\\data

    分析:
        1、将E:\\data封装成File对象
        2、获取File对象下面所有文件和文件夹组成的File对象数组
        3、遍历File对象数组,判断是否是文件或者文件夹
            1)如果是文件,就直接delete
            2)如果是文件夹,继续回到第2步

 */
public class DiGuiTest2 {
    public static void main(String[] args) {
        File file = new File("E:\\data");
        deleteFile(file);
    }

    public static void deleteFile(File file) {
        File[] files = file.listFiles();
        if (files != null) {
            for (File file1 : files) {
                if(file1.isFile()){
                    file1.delete();
                }else {
                    deleteFile(file1);
                }
            }
        }
        file.delete();
    }
}
posted @ 2024-03-10 18:23  peculiar-  阅读(2)  评论(0编辑  收藏  举报