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); // 调用自身 递归
                    }
                }
            }
        }

    什么时候使用递归?

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

    不要滥用递归

  • 相关阅读:
    UNIX网络编程之旅配置unp.h头文件环境[ 转]
    C++著名程序库
    开源框架完美组合之Spring.NET + NHibernate + ASP.NET MVC + jQuery + easyUI 中英文双语言小型企业网站Demo
    网络库介绍
    置顶问题
    最近做的一个项目
    Storm 遇到问题?
    海量算法视频下载
    Quartz.NET作业调度框架详解
    c#中的委托、事件、Func、Predicate、Observer设计模式以及其他
  • 原文地址:https://www.cnblogs.com/liuqiwang/p/8312792.html
Copyright © 2011-2022 走看看