• 递归算法


    递归函数:通俗的讲,递归算法就是在方法里调用自己。

    递归方法需要注意:

    递归方法一定要有一个满足条件结束本身调用自己。就是要有一个出口结束方法调用。

    递归方法在性能上会有一些损耗,但是在代码方面,可以节省大量的计算和判断。

    递归函数的缺点:性能消耗比较大,会重复计算,调用次数太多可以会超出栈的容量。

    在我遇到的问题中,最经典的就是区域查询:

    在计算区域找相应的上下级数据(假设区域有5级),普通的算法:

    需要先判断层级,然后按级查询

    if (item.AreaLevel == 1)
    {
       var oneInfo = AreaInfo.Where(obj => obj.Level == "1" && obj.Code == item.AreaCode).FirstOrDefault();
       if (oneInfo != null)
       {                    
            list.Add(oneInfo);
            var twoInfo = AreaInfo.Where(obj => obj.ParentCode == oneInfo.Code).ToList();
            var threeInfo = AreaInfo.Where(obj => twoInfo.Select(a => a.Code).Contains(obj.ParentCode)).ToList();
            var foreInfo = AreaInfo.Where(obj => threeInfo.Select(a => a.Code).Contains(obj.ParentCode)).ToList();
            var fiveInfo = AreaInfo.Where(obj => foreInfo.Select(a => a.Code).Contains(obj.ParentCode)).ToList();
            list.AddRange(twoInfo);
            list.AddRange(threeInfo);
            list.AddRange(foreInfo);
            list.AddRange(fiveInfo);
       }
    }else if(item.AreaLevel==2){}else if(item.AreaLevel==3)
    。。。。。一直判断到AreaLevel==5

    递归算法

    private List<GetAreaInfoDTO> GetAreaInfoDto(List<GetAreaInfoDTO> AreaInfo, List<GetAreaInfoDTO> dto)
            {
    
                var result = new List<GetAreaInfoDTO>();
                var infoList = new List<GetAreaInfoDTO>();
                foreach (var item in dto)
                {
    
                    var info = AreaInfo.Where(obj => obj.Level == (Convert.ToInt32(item.Level) + 1).ToString()
                        && obj.ParentCode == item.Code).ToList();
    
                    infoList.AddRange(info);
                }
                if (infoList != null && infoList.Count > 0)//当查到第五级时,infoList为空结束递归,返回多次递归参数,添加到result中
                {
                    result.AddRange(infoList);
                    result.AddRange(GetAreaInfoDto(AreaInfo, infoList));//每次将新得到的参数传入方法中,获取下一级的数据
                }
                return result;
            }
  • 相关阅读:
    集合的一些操作总结
    字符串的操作
    python字典的操作总结
    python中的列表知识总结
    Python利用文件操作实现用户名的存储登入操作
    如何理解:城市的“信息化→智能化→智慧化”
    程序员必备技能-怎样快速接手一个项目
    程序员的职业规划
    只要 8 个步骤,学会这个 Docker 命令终极教程!
    使用GitLab实现CI/CD
  • 原文地址:https://www.cnblogs.com/zwyAndDong/p/13180663.html
Copyright © 2020-2023  润新知