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

    什么时候使用递归?

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

    不要滥用递归

  • 相关阅读:
    xmlHttpRequest参数
    蒙哥马利:“沙漠之狐”猎手
    c# as is 类型转换
    值类型和引用类型
    BuuctfmiscN种方法解决
    Buuctfmisc二维码
    Buuctfweb[HCTF 2018]WarmUp
    Buuctfmisc大白
    map用索引作下标之后,再插值时报错.
    c++ stl 的string 的size() legth()区别
  • 原文地址:https://www.cnblogs.com/liuqiwang/p/8312792.html
Copyright © 2011-2022 走看看