zoukankan      html  css  js  c++  java
  • .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); // 调用自身 递归
                    }
                }
            }
        }

    什么时候使用递归?

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

    不要滥用递归

  • 相关阅读:
    如何把SQLServer数据库从高版本降级到低版本
    关于如何利用Pocket CHM Pro制作帮助文档
    关于ASP.net TextBox控件的失去焦点后触发其它事件
    由window.history.back()引发的问题
    设置按钮不可用避免重复提交
    【转】一个高端.NET技术人才的2014年度总结
    Zabbix 各种报错信息和遇到的问题处理(持续总结更新~~~~~)
    ASP.NET调用Web Service
    ASP.NET导出bdf文件
    CS文件密码加密类
  • 原文地址:https://www.cnblogs.com/liuqiwang/p/8312792.html
Copyright © 2011-2022 走看看