day27_递归

  • 递归

递归

​ 当前方法调用自身的现象

递归的分类

  • ​ 直接递归:方法自身调用自己
  • ​ 间接递归:方法A调用了方法B,方法A调用方法C,方法C反过来调用方法A

注意事项:

  • ​ 递归一定要有边界条件,确保递归能够停止,否则会发生栈溢出危险
  • ​ 在递归当中虽然有限定条件,但是递归的次数不能太多,否则也会发生栈溢出危险
  • ​ 构造方法不可递归
使用递归实现累加1-n求和
n + n-1 + ... + 1;
public static int sumByRecursion(int n) {
        if (n == 1) {//结束条件
            return 1;
        }
        return n + sumByRecursion(n - 1);
    }
使用递归实现n阶乘
public static int multiplyByRecursion(int n) {
        if (n == 1) {//结束条件
            return 1;
        }
        return n * multiplyByRecursion(n - 1);
    }    
    
使用递归打印多级目录
    //打印目录
        System.out.println(file);
        File[] files = file.listFiles();
        for (File f : files) {
            //判断   如果f为目录,继续向下遍历
            if (f.isDirectory()){
                count++;
                printFileDirectory(f); //遍历该目录
            }else{
                System.out.println("	"+f);
            }
        }
//遍历查询.txt文件
for (File f : files) {
                if (f.isDirectory()){
                    search(f);
                }else{
                    if (f.getName().toLowerCase().endsWith(".txt")){
                        System.out.println(f);
                    }
                }
        }

文件过滤器

  • java.io.FileFilter是一个接口,该接口的实现类对象可以传递给File类的listFiles(FileFilter filter)作为参数,接口当中只有一个方法:

    boolean accept(File pathname):测试pathname是否应该包含在当前的File目录中,如果符合返回true。

  • java.io.FilenameFilter接口,实现此接口的类实例也是用于过滤文件名

boolean accept(File dir,String name):测试指定文件是否应该包含在某一文件列表中

​ File dir:构造方法中传递的被遍历的目录

​ String name:使用listFilter方法遍历目录,获取的每一个文件/文件夹的名称

注意:两个过滤器接口都没有实现类,需要我们自己定义实现类,重写accept方法,在方法中自定义过滤规则

 File[] files = file.listFiles((File pathname) -> { //懒蛋表达式
            if (pathname.isDirectory()) {//遍历文件夹
                return true;
            }
            //return pathname.getName().toLowerCase().endsWith(".txt");//遍历文件
            if (pathname.getName().toLowerCase().endsWith(".txt")) {
                return true;
            } else {
                return false;
            }
        });
        for (File f : files) {
            if (f.isDirectory()) {
                search(f);
            } else {
                //if (f.getName().toLowerCase().endsWith(".txt")){
                System.out.println(f);
                //}
            }
        }
原文地址:https://www.cnblogs.com/mitoris/p/14135912.html