.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); // 调用自身 递归 } } } }
什么时候使用递归?
当层级过多,或者不确定有多少层级的时候,使用递归,满足条件则跳出
不要滥用递归