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

五分钟教你学会递归

    • 一、什么是递归?
    • 二、递归可以用来做什么?
    • 三、使用递归归类文件夹

一、什么是递归?

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

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

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

文件夹结构图:
什么是递归?递归可以用来做什么?如何使用递归减少代码量(五分钟教你学会递归)_第1张图片

三、使用递归归类文件夹

图中的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集合中
        }
    }
}

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

你可能感兴趣的:(数据结构与算法,java,python,编程语言)