递归

递归,指在当前方法内调用自己的这种现象

public void method(){
    System.out.println(“递归的演示”);
    //在当前方法内调用自己
    method();
}

递归分为两种,直接递归和间接递归。

直接递归称为方法自身调用自己。间接递归可以A方法调用B方法,B方法调用C方法,C方法调用A方法。

递归一定要有条件限定,保证递归能够停止下来,否则会发生栈内存溢出。

在递归中虽然有限定条件,但是递归次数不能太多。否则也会发生栈内存溢出。

 递归打印所有子目录中的文件路径

public class FileDemo2 {
    public static void main(String[] args) {
        File file = new File("d:\test");
        getFileAll(file);
    }
    //获取指定目录以及子目录中的所有的文件
    public static void getFileAll(File file) {
        File[] files = file.listFiles();
        //遍历当前目录下的所有文件和文件夹
        for (File f : files) {
            //判断当前遍历到的是否为目录
            if(f.isDirectory()){
                //是目录,继续获取这个目录下的所有文件和文件夹
                getFileAll(f);
            }else{
                //不是目录,说明当前f就是文件,那么就打印出来
                System.out.println(f);
            }
        }
    }
}

 搜索指定目录中的.java文件(含子目录)

public class FileDemo4 {
    public static void main(String[] args) {
        File file = new File("d:\test");
        getFileAll(file);
    }
    //获取指定目录以及子目录中的所有的文件
    public static void getFileAll(File file) {
        File[] files = file.listFiles(MyFileFilter());
        //遍历当前目录下的所有文件和文件夹
        for (File f : files) {
            //判断当前遍历到的是否为目录
            if(f.isDirectory()){
                //是目录,继续获取这个目录下的所有文件和文件夹
                getFileAll(f);
            }else{
                //不是目录,说明当前f就是文件,那么就打印出来
                System.out.println(f);
            }
        }
    }
}
//定义类实现文件名称FilenameFilter过滤器
class MyFileFilter implements FilenameFilter{
    public boolean accept(File dir, String name) {
        return name.endsWith(".java");
    }
}

 

原文地址:https://www.cnblogs.com/cst123/p/13402990.html