• .NET 简单的递归使用场景


    什么是递归:自己调用自己,直到满足条件跳出

    递归的缺点:

    递归很耗内存,容易让机器挂掉

    比如递归文件夹,当文件夹的层级有非常非常多的时候,就很容易挂掉,因为递归的时候把上层文件夹的上下文都保存在内存中

    下面简单的实例

     public class Recursion
        {
            /// <summary>
            /// 获取当前文件夹下所有的子文件夹
            /// </summary>
            /// <param name="rootPath"></param>
            /// <returns></returns>
            public static List<DirectoryInfo> GetAllDirectory(string rootPath)
            {
                //检查文件夹是否存在
                if (!Directory.Exists(rootPath))
                    return null;
                //文件夹容器
                List<DirectoryInfo> directoryList = new List<DirectoryInfo>();
                //获取当前文件夹
                DirectoryInfo directory = new DirectoryInfo(rootPath);
                //添加到容器
                directoryList.Add(directory);
                //调用递归方法,获取文件夹下的所有子文件夹
                GetChildDirectory(directoryList, directory);
                return directoryList;
            }
    
            /// <summary>
            ///递归很耗内存,太大的容易让机器挂掉
            ///递归文件夹,会把上层文件夹的上下文都保存在内存中,不能释放
            ///不要滥用递归
            /// </summary>
            /// <param name="directoryList">数据容器</param>
            /// <param name="directoryinfo">当前文件夹</param>
            private static void GetChildDirectory(List<DirectoryInfo> directoryList, DirectoryInfo directoryinfo)
            {
                DirectoryInfo[] directoryListChild = directoryinfo.GetDirectories(); //一级子文件夹
                directoryList.AddRange(directoryListChild);
                if (directoryListChild.Length > 0)//跳出条件
                {
                    foreach (var directoryChild in directoryListChild)
                    {
                        GetChildDirectory(directoryList, directoryChild); // 调用自身 递归
                    }
                }
            }
        }

    什么时候使用递归?

    当层级过多,或者不确定有多少层级的时候,使用递归,满足条件则跳出

    不要滥用递归

  • 相关阅读:
    相交链表 3种方法
    旋转数组 空间复杂度为O(1) 的2 种方法 + 1种空间复杂度O(n)
    各种sort排序总结
    我写过的bug...
    裸BFS题若干
    luence
    mysql 找出外键等约束
    mysql (8.0 或以下)数据 卸载, 安装, 创建用户, 赋权
    navicat 导入sql文件 的正确方法
    [转] git clone 远程分支
  • 原文地址:https://www.cnblogs.com/liuqiwang/p/8312792.html
Copyright © 2020-2023  润新知