• 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);
                    //}
                }
            }
    
  • 相关阅读:
    UVA 1262 Password(密码)(暴力枚举)
    【POJ 3468】A Simple Problem with Integers【树状数组】
    【洛谷P3368】【模板】树状数组2【树状数组】
    【洛谷P3368】【模板】树状数组2【树状数组】
    【洛谷P3368】【模板】树状数组2【树状数组】
    【洛谷P1955】程序自动分析【并查集】【离散】
    【洛谷P1955】程序自动分析【并查集】【离散】
    【洛谷P1955】程序自动分析【并查集】【离散】
    【CH 4201】楼兰图腾【树状数组】
    【CH 4201】楼兰图腾【树状数组】
  • 原文地址:https://www.cnblogs.com/mitoris/p/14135912.html
Copyright © 2020-2023  润新知