• 递归


    递归
    概述

    递归:指的是当前方法调用自己的一种现象。

    递归的分类:

    递归分为两类:直接递归和间接递归

    直接递归:称为方法自身调用自己的情况

    间接递归:可以归结为:方法A调用了方法B,方法B调用了方法C,方法C反过来又调用了方法A。

    • 注意事项

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

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

      • 构造方法禁止递归。

        示例代码:

        递归图解

    递归求阶乘

    阶乘:所有小于等于该数的正整数的乘积

    n的阶乘:n!=n(n-1) * (n-2) * (n-3) ... * 3 * 2 * 1

       public static void main(String[] args) {
                 int i=sum(5);
            System.out.println(i);//6
        }
        /*
        定义一个方法使用递归操作
        n+(n-1)+(n+2)+(n-3)+...+1
        已知:
           最大值:n
           最小值:1
           使用递归必须明确:
           1.递归的结束条件,获取到1的时候递归结束
           2.递归的目的:获取下一个被加的数字(n-1)
         */
        public static int sum(int n){
            //边界条件
                 if (n==1){
                     return 1;
                 }
                 //获取下一个被加的数字
            return n*sum(n-1);
        }
    

    综合案例

    文件搜索

    搜索:D:IntelliJ IDEA Community Edition 2020.2.1jbrIntelliJ IDEA Community Edition 2020.2.1license目录中的所有的.txt文件

    分析:

    1.目录搜索,无法判断有多少级目录,所以使用递归,遍历所有的目录

    2.遍历母的时候,获取的是所有的子文件

    package Demo01;
    
    import java.io.File;
    
    public class Demo05 {
    
        public static void main(String[] args) {
            //构建一个包
            File file = new File("D:\IntelliJ IDEA Community Edition 2020.2.1\jbr\IntelliJ IDEA Community Edition 2020.2.1");
             getAllTxt(file);
    
        }
        /*
        定义一个方法,遍历所有的.txt文件
        方法中依然需要传参数目录
         */
        public static void getAllTxt(File dir){
            File[] files = dir.listFiles();
            //遍历files
            for (File f : files) {
                //判断是否是一个目录
                if (f.isDirectory()){
                    getAllTxt(f);
                }else{
                  /*  //先获取文件的名称
                    String name = f.getName();
                    //大写字符串转换小写
                    name=name.toLowerCase();
                    //再次判断名称是否已.txt结尾
                    if (name.endsWith(".txt")){
                        System.out.println(f);
                    }*/
                    //链式编程写法
                    if (f.getName().toLowerCase().endsWith(".txt")){
                        System.out.println(f);
                    }
                }
            }
        }
    }
    
    文件过滤器优化

    "Java.io.FileFilter"是一个接口,是File的过滤器,该接口的对象可以传递给File类的listFiles(FileFilter)作为参数,接口只有一个方法:

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

    过滤一下

    Lambda优化

    实例代码

    File[] files = file.listFiles(pathname -> pathname.getName().toLowerCase().endsWith(".txt")||pathname.isDirectory());
    
  • 相关阅读:
    android入门之三【应用程序组成】
    Palm应用开发之一开发环境搭建
    android 入门之一【开发环境搭建】
    在DataGridView中的CheckBox值变更后立即获取值。
    根据字符串返回类型
    CSS模拟不同的拐角效果
    SQL查询生成交叉列表
    LinkButton 的 OnClick 事件 可以是一个方法
    代替marquee的滚动字幕效果代码
    JavaScript实现DataGrid中添加CheckBox列(全选与否)
  • 原文地址:https://www.cnblogs.com/lulubenlei/p/14136738.html
Copyright © 2020-2023  润新知