C#递归的应用
类别:编程学习 浏览量:477
时间:2013-12-2 C#递归的应用
C#递归的应用递归的特点:
1. 递归方法一直会调用自己直到某些条件被满足
2. 递归方法会有一些参数,而它会把一些新的参数值传递给自己。
下面介绍一些例子介绍递归的用法
1. 阶乘
阶乘(!)是小于某个数的所有正整数的乘积。
0! = 1
1! = 1
2! = 2 * 1! = 2
3! = 3 * 2! = 6
...
n! = n * (n - 1)!
递归算法
public long Factorial(int n)
{
if (n == 0)//限制条件,对该方法调用自己做了限制
return 1;
return n * Factorial(n - 1);
}
2. Fibonacci数列
Fibonacci数列是按以下顺序排列的数字:
0,1,1,2,3,5,8,13,21,34,55,…如果F0 = 0 并且 F1= 1 那么Fn = Fn-1 + Fn-2
递归算法
public long Fib(int n)
{
if (n == 0 || n == 1) //满足条件
return n;
return Fib(k - 2) + Fib(k - 1);
}
3、计算1+2+3+4+...+100的值
static void Main(string[] args)
{
Console.WriteLine(Process2(100));
Console.ReadLine();
}
public static int Process2(int i)
{
//计算1+2+3+4+...+100的值
if (i == 0) return 0;
return Process2(i - 1) + i;
}
4、汉诺塔问题
static void Main(string[] args)
{
Hanoi(5, 'A', 'B', 'C');
Console.ReadLine();
}
public static void Hanoi(int n ,char A, char B, char C)
{
//汉诺塔问题
//将n个盘子从A座借助B座,移到C座
if (n == 1) Move(A, C);
else
{
Hanoi(n - 1, A, C, B);
Move(A, C);
Hanoi(n - 1, B, A, C);
}
}
public static void Move(char startPlace, char endPlace)
{
Console.WriteLine("Move {0} To {1}",startPlace,endPlace);
}
5、查找文件
要是想获得某一目录下的所有文件和目录(包含所有子目录),那该怎么办呢?目录都是一层套一层的,我们不能预知某个目录的深度,只有获得了父节点,才有可能了解子节点,解决这个问题,只有递归这个概念了。
C#递归实现代码
public ArrayList al=new ArrayList(); //我把ArrayList当成动态数组用,非常好用
public void GetAllDirList(string strBaseDir)
{
DirectoryInfo di=new DirectoryInfo(strBaseDir);
DirectoryInfo[] diA=di.GetDirectories();
for(int i=0;i<diA.Length;i++)
{
al.Add(diA[i].FullName); //diA[i].FullName是某个子目录的绝对地址,把它记录在ArrayList中
GetAllDirList(diA[i].FullName); //注意:这里使用C#递归的方法
}
}
总结
1、可以用递推算法来替代递归,且性能会更好些,但我们可能需要更多的时间开销和非递归函数。但关键是我们必须根据场景选择最佳实现方式。
2、如果性能是非常重要的,请避免使用递归
3、如果递推方式不是很复杂的,请避免使用递归
当然,我并不是要贬低递归的价值,例如人工智能中的重要一章有个极小化极大算法(Minimax algorithm),全部是用递归实现的。
您可能感兴趣
- C#中Dictionary的用法
- C#中string.format的格式和用法
- C#插入排序
- 数据库字段类型对应C#数据类型
- C#快速排序
- c#中list排序
- C#中equals和==的区别有哪些
- C#静态变量、静态方法、静态类
- C#获取上个月第一天和最后一天
- C#中属性的用法
- C# string 和 stringbuilder 的区别
- C#中app.config配置文件
- C#递归的应用
- C# File类的操作
- C#中ArrayList与Array的区别
- C#中ICollection介绍
- 下雪会怎样(下雪怎样画)
- 白蓝色穿搭(白蓝色衣服配什么裤子)
- 天空是什么颜色(天空是什么颜色的英语)
- 高马尾扎发(高马尾扎发教程视频)
- 这里输入关键词(请手动输入关键词)
- 小说 顾瑾岚拿出一套飞行棋,别说你连飞行棋都不会哦(顾瑾岚拿出一套飞行棋)
热门推荐
- vue左右滑动切换(vue实现界面滑动效果)
- 怎么用docker中的mysql连接数据库(解决Docker之mysql容器数据库更改不生效的问题)
- echarts可视化(swiper+echarts实现多个仪表盘左右滚动效果)
- visual studio中快速定位打开的文件所处的树形路径
- tomcat运行中找不到路径(Tomcat将配置文件放在外部的解决方法)
- 怎样在python中散点图(python使用Plotly绘图工具绘制散点图、线形图)
- mysql是否支持透明数据加密(MySQL的加密解密的几种方式小结)
- python开启两个线程(Python开启线程,在函数中开线程的实例)
- python装饰器使用说明(详解Python装饰器)
- html5布局(Html5让容器充满屏幕高度或自适应剩余高度的布局实现)