zoukankan      html  css  js  c++  java
  • 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);
                    //}
                }
            }
    
  • 相关阅读:
    POJ-3468 A Simple Problem with Integers(线段树、段变化+段查询、模板)
    CSUOJ-1978 LXX的图论题(最短路、Bellman-Ford判断负圈)
    CSU-1975 机器人搬重物(BFS)
    POJ-3522 Slim Span(最小生成树)
    POJ-1733 Parity game (并查集)
    libmysqlclient.so.16未找到方法
    python 不同目录间的模块调用
    python模块详解 logging
    python模块详解 re
    python模块详解 hashlib
  • 原文地址:https://www.cnblogs.com/mitoris/p/14135912.html
Copyright © 2011-2022 走看看