什么是递归?递归可以用来做什么?如何使用递归减少代码量(五分钟教你学会递归)

本文通过《盗梦空间》的比喻解释了递归的概念,并详细介绍了递归在文件夹归类中的应用,包括如何使用递归方法对文件夹进行层级归类。

一、什么是递归?

初次听到这个词语的时候,想必大家都很不理解,什么是递归呢?举个简单的例子,很多人都看过电影《盗梦空间》吧。其实这个电影讲的就是个递归的例子,人做梦一层一层的进入了多重梦境,然后达到某种条件时,梦就会中断。递归就是同一个事物不断地重复进入到同一种状态,当达到某种条件时,这种状态就会终止,跳出来。
废话不多说,上代码!更好理解

二、递归可以用来做什么?

递归多用于实现树的分层结构,比如部门下有多个部门,多个部门下每个部门又有多个部门;文件夹下有多个文件夹,每个文件夹下有出现多个文件夹或文件;你有多个文件夹,想要给这些文件夹进行归类时,那么递归是种不错的选择!

文件夹结构图:
在这里插入图片描述

三、使用递归归类文件夹

图中的Category是文件夹对象,该类属性如下:

  private long id;
    /**
     * 类别名称
     */
    private String categoryName;
    /**
     * 排序id
     */
    private Integer orderId;
    /**
     * 上级id
     */
    private Integer  parentId;
    /**
    * 文件夹集合,一个文件夹可能会包含有多个文件夹
    */
     private List<CategoryDto> children = new ArrayList<>();

调用此方法,对文件夹归类

    @GetMapping(value = "/getCategoryTree")
    public RestResult getCategoryTree() {
        RestResult restResult = new RestResult();
        //获取一级父类文件夹
        List<Category> cateParentsDto = iCategoryService.findByParentId(0);
         //获取所有分类文件夹(其中包括父类与子类文件夹)
        List<Category> categoryDtoAllList=iCategoryService.getAllCategory(null);
        for (Category Category:cateParentsDto) {
            getCategoryToTree(Category,categoryDtoAllList);//递归的方法
        }
        restResult.setData(cateParentsDto);
        return restResult;
    }
    

递归将分类文件夹进行归类

public void getCategoryTree(Category category,List<Category> categoryAllList) {
    for (Category cate : categoryAllList) {
    //判断,如果父类文件夹id与集合中的某个文件夹的父类id相同,则进入判断内部
        if (category.getId()==cate .getParentId()){
            //该步为代码的核心,判断cate对象中是否有Children集合(多个文件夹),进行递归。
            getCategoryToTree(cate , categoryAllList);
            category.getChildren().add(cate );//表示该文件夹是category的子文件夹,所以要添加到Category类的Children集合中
        }
    }
}

其实,使用递归很简单,就是无限的调用同一种方法,直到达到某个条件时,终止递归。如有问题,欢迎小伙伴们的提问。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值