每天一个函数之递归函数

210 阅读2分钟

这是我参与8月更文挑战的第4天,活动详情查看:8月更文挑战

递归函数

?什么是递归函数,就是一个函数自己调用自己本身,当我们执行一个递归函数时,必须要有一个结束条件,因为递归函数会反复不断的调用自身,就像进入死循环一样,只有当满足结束条件时才会停止。

最典型的实例就是删除文件。现在有这样一个命题,已知一个路径,可以是文件也可以是文件夹,结果是要删除这个路径下的所有内容,如果是文件就删除自身。 但是要求每次删除的文件夹下面不能有其他文件和文件夹,这就必须要不断重复的调用相同的删除文件内容的函数,这就是递归思想,只有这样才能将目标路径下的内容全部删除掉,还要做一些必要的判空条件。当然最重要的是结束条件,当该路径如果是个文件,则文件已被删除就return结果,或者该路径是个目录,目录为空时则return结果。

上代码:

public class FileDeleteDemo {
    public static void main(String[] args) {
        File f = new File("D:\test\test.txt");
        deleteFile(f);
    }
    public static void deleteFile(File file) {
        // 首先判断这个路径下的是文件夹/目录,不是的话就直接删除
        if (file.isDirectory()) {
            // 如果是文件夹/目录,就删除其下所有的文件和文件夹
            File[] files = file.listFiles();
            // 此时要要用到for循环遍历一遍,找出所有的文件和文件夹,再分别处理
            for (File f : files) {
                // 如果是文件,就删除
                if (f.isFile()) {
                    System.out.println("已经被删除的文件:" + f);
                    // 删除文件
                    f.delete();
                } else if (file.isDirectory()) {
                    // 如果是文件夹,就递归调用文件夹的方法,这里就是重复调用自身的函数以达到循环删除文件夹所有内容。
                    deleteFile(f);
                }
            }
            // 如果是个空文件夹,则删除文件夹自己,即最底层文件夹删除成功。
            System.out.println("已经被删除的文件夹:" + file);
            file.delete();
            return;// 文件夹被删除后,直接用return语句结束当次递归调用
        }
        // 如果是文件,就直接删除自己
        System.out.println("已经被删除的文件:" + file);
        file.delete();
    }
}