.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 > )//跳出条件
{
foreach (var directoryChild in directoryListChild)
{
GetChildDirectory(directoryList, directoryChild); // 调用自身 递归
}
}
}
}
什么时候使用递归?
当层级过多,或者不确定有多少层级的时候,使用递归,满足条件则跳出
不要滥用递归
.NET 简单的递归使用场景的更多相关文章
- ASP.NET MVC与ASP.NET Web Form简单区别与适用场景
概论: Asp.net 微软 提供web开发框架或者技术.分Web Form和ASP.NET MVC.下面简单说明各自优缺点及使用场景. Web Form 优点: 1.支持丰富的服务器控件.如:Gr ...
- ViewStub的简单解析和使用场景
ViewStub是Android布局优化中一个很不错的标签/控件,直接继承自View.虽然Android开发人员基本上都听说过,但是真正用的可能不多. ViewStub可以理解成一个非常轻量级的Vie ...
- <经验杂谈>介绍Js简单的递归排列组合
最近在开发SKU模块的时候,遇到这样一个需求,某种商品有N(用未知数N来表示是因为规格的数组由用户制定且随时可以编辑的,所以对程序来说,它是一个未知数)类规格,每一类规格又有M个规格值,各种规格值的组 ...
- SceneKit:简单的3D游戏场景搭建
SceneKit是Apple用来开发休闲3D游戏的框架,不同于底层的OpenGL库,你仅仅需要很少的代码就可以快速看到实际的3D场景效果.下面简单的聊聊搭建一个3D游戏场景需要做的事情. 首先你必须用 ...
- python中简单的递归(断点报错的小福利)
首先要先理解什么是递归? 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数. 下面讲了一个很简单的递归函数 def clac(n): print(n) if int( ...
- Flask框架(2)--编写简单的用户注册--登录场景
为了更好的理解web前后端的工作业务逻辑:本笔记记录用flask框架编写的一个最初级的代码实现简单的用户注册,登录场景: 初次进入首页,提示--游客,欢迎参观,有登录和注册选项, 登录成功后的用户,会 ...
- Python技法:实现简单的递归下降Parser
1. 算术运算表达式求值 在上一篇博文<Python技法:用re模块实现简易tokenizer>中,我们介绍了用正则表达式来匹配对应的模式,以实现简单的分词器.然而,正则表达式不是万能的, ...
- C# 最简单的递归
public void AddTree(int ParentID, TreeNode pNode) { TreeNode tn1 = new TreeNode(); DataView dvTree = ...
- j简单的递归
1 某人写了n封信和n个信封,如果所有的信都装错了信封.求所有的信都装错信封共有多少种不同情况. 归纳法例子 1.有n个硬币(n为偶数)正面朝上排成一排,每次将n-1个硬币翻成朝上为止.编程让计算机把 ...
随机推荐
- STL之二:vector容器用法详解
转载于:http://blog.csdn.net/longshengguoji/article/details/8507394 vector类称作向量类,它实现了动态数组,用于元素数量变化的对象数组. ...
- ubuntu切割mp3文件
ffmpeg -i InputFile -vn -acodec copy -ss 00:00:00 -t 00:01:32 OutPutFile
- vector.clear()的内存泄露问题
在使用vector的过程中,经常会遇到以下场景 vector<int> vec; ) { vec.push_back(); vec.push_back(); vec.push_back() ...
- Fragment+ViewPager实现仿微信点击和滑动切换界面
这是在我写的新闻App中实现的界面切换 贴出切换界面的主要代码: xml代码: <span style="font-size:14px;"> <android.s ...
- java web中resources路径
UserBean.class.getClassLoader().getResource(filePath).getPath() 或者 Thread.currentThread().getContext ...
- 怎么修改jar包中的class文件然后再重新打成jar包
1.导入到eclipse中, 修改完了 然后导出jar即可 2.jar cf file.jar *.class 将当前目录下所有CLASS文件打包成新的JAR文件 3.对于补丁.之前已经有jar 例如 ...
- 命令行访问远程mysql数据库
命令: mysql -u用户名 -p密码 -h远程数据库IP地址 -P端口 -D数据库名 例子: 使用用root帐号,密码为123456,登录ip地址为192.168.1.110,端口为3306,名称 ...
- Sass 条件-循环语句
学习Sass中 @if...@else @for @while @each 一.条件判断 - @if @else 示例: @mixin blockOrHidden($boolean:true){ @i ...
- 【bzo1579】拆点+dijkstra优先队列优化+其他优化
题意: n个点,m条边,问从1走到n的最短路,其中有K次机会可以让一条路的权值变成0.1≤N≤10000;1≤M≤500000;1≤K≤20 题解: 拆点,一个点拆成K个,分别表示到了这个点时还有多少 ...
- 跨域iframe高度计算
一.同域获取iframe内容 这里有两个细节: 1. 取iframe内的文档对象,标准浏览器使用contentDocument属性,IE低版本(IE6,7,8)使用document属性. 2. cal ...