栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

关于递归的说明

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

关于递归的说明

练习:使用递归计算1-100的累加和
**
 * 递归练习:使用递归计算1-100的累加和
 *
 * @author zhuhuix
 * @date 2020-05-31
 */
public class AddRecursion {
    public static void main(String[] args) {
        System.out.println(sum(100));
    }

    public static int sum(int n) {
        if (n == 1) {
            return 1;
        } else {
            return n + sum(n - 1);
        }
    }
}

输出

递归深入

1:数据库关系(MYSQL)

2:程序持久层代码
2-1:程序持久层接口

  
    List queryByPid(Integer pid);

2-2:程序持久层接口映射XML

 
        select
          id, pid, roleName
        from digui.table_test
        where pid = #{pid}
    

这里的持久层是通过 父级的pid查询出对应的所有目录信息,以一个集合的形式返回

2:递归获取所有的目录(重点来了)
 @Override
    public List findAllRole() {
        List data = out(0);
        return data;
    }

    private List out(int i) {
        //查询当前pid对应的所有目录(该目录是用pid查询的,所以是对应的子目录)
        List list= this.roleDao.queryByPid(i);
        //如果集合的长度大于1,遍历集合,不然直接返回数据
        if(list.size() > 0) {
            for (Role role: list) {
                //再通过其id作为pid查询他的下级目录
                table.setList( out( role.getId() ) );
            }
        }
        return list;
    }

解释:
1:首先我在 findAllRole 方法中先第一此调用 out 方法,因为我们传入的参数是 pid(父级id),一级目录的pid我们默认是 0(随意),所以我们调用 out 方法时传入的参数时 0 ;
2:在 out 方法中我们首先先调用持久层接口,通过传入的参数 pid 获取所有的目录,这个时候我们需要判断集合的 长度 ,如果长度为0,说明这个pid对应的子目录是没有的(这个点注意,这个集合可能是一级目录集合,也可能是二三四级目录)。反之我们遍历,然后将遍历的每一个元素作为父级目录查询出子集然后set到实体中,看代码,看不懂就细品

最后贴出我最后查出来的结果:

[
    {
        "id": 1,
        "pid": 0,
        "rolename": "一级目录",
        "list": [
            {
                "id": 2,
                "pid": 1,
                "rolename": "二级目录",
                "list": [
                    {
                        "id": 3,
                        "pid": 2,
                        "rolename": "三级目录",
                        "list": [
                            {
                                "id": 4,
                                "pid": 3,
                                "rolename": "四级目录",
                                "list": []
                            }
                        ]
                    }
                ]
            }
        ]
    }
]
递归打印多级目录:
package com.itheima.demo01.Recursion;

import java.io.File;

public class Demo03Recursion {
    public static void main(String[] args) {
        File file = new File("C:\Users\大 大\Desktop\aaa");
        getAllFile(file);

    }
    //定义一个方法,参数传递File类型的目录,方法中对目录进行遍历
    public static void getAllFile(File dir) {
        //打印便利的目录名称
        System.out.println(dir);
        File[] files = dir.listFiles();
        for (File f : files) {
            //对遍历得到的File对象f进行判断,判断是否是文件夹
            if(f.isDirectory()){
                getAllFile(f);
            }else {
                //f是一个文件,直接打印即可
                System.out.println(f);
            }
        }

    }


}

综合案例:文件搜索(文件过滤)
找到以.java结尾的文件并输出

package com.itheima.demo01.Recursion;

import java.io.File;

public class Demo04Recursion {
    public static void main(String[] args) {
        File file = new File("C:\Users\大 大\Desktop\aaa");
        getAllFile(file);

    }
    //定义一个方法,参数传递File类型的目录,方法中对目录进行遍历
    public static void getAllFile(File dir) {
        //打印便利的目录名称
        //System.out.println(dir);
        File[] files = dir.listFiles();
        for (File f : files) {
            //对遍历得到的File对象f进行判断,判断是否是文件夹
            if(f.isDirectory()){
                getAllFile(f);
            }else {
                //f是一个文件,直接打印即可
                //需要将File对象f转为字符串对象
                //1.
                //String name = f.getName();
                //2.
                //String path = f.getPath();
                //3.
                String s = f.toString(); //toString()方法里面调用的其实就是getPath
                //将字符串变成小写的
                 s = s.toLowerCase();
                //判断字符串是不是以.java结尾,注意返回的是布尔型
                boolean b = s.endsWith(".java");
                if (b){
                    System.out.println(f);
                }

                //链式编程
                if (f.getName().toString().toLowerCase().endsWith(".java")){
                    System.out.println(f);
                }

            }
        }

    }

}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/681575.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号