C#递归
什么是递归?
先看语言例子
从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?“从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?‘从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?……’”
一只狗来到厨房,偷走一小块面包。厨子举起杓子,把那只狗打死了。于是所有的狗都跑来了,给那只狗掘了一个坟墓,还在墓碑上刻了墓志铭,让未来的狗可以看到:“一只狗来到厨房,偷走一小块面包。厨子举起杓子,把那只狗打死了。于是所有的狗都跑来了,给那只狗掘了一个坟墓,还在墓碑上刻了墓志铭,让未来的狗可以看到:‘一只狗来到厨房,偷走一小块面包。厨子举起杓子,把那只狗打死了。于是所有的狗都跑来了,给那只狗掘了一个坟墓,还在墓碑上刻了墓志铭,让未来的狗可以看到……’”
看到了吧,不断的循环重复。
再来看数学例子,
斐波那契数列是典型的递归案例:
F0=0; F=1; FN= Fn-1+Fn-2
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233……
这里需要注意 0不是第一项,而是第0项
再来看下编程思想
我们在编程语言里面可以看作是方法调用自己,不断的调用。直至有某个条件来终止,则停止调用。
上代码
namespace 递归算法 { class Program { public static void Main(string[] args) { //输出1,2,3,4,8,13,21,34,55,89 //屌丝算法 int[] countNumber=new int[10]; for(int i=0;i<countNumber.Length;i++) { if(i==0) { countNumber[0]=1; } else if(i==1) { countNumber[1]=2; } if(i>=2) { countNumber[i]=countNumber[i-1]+countNumber[i-2]; } } foreach(var Num in countNumber) { Console.Write(Num+" "); } Console.WriteLine("\n------------- 我是分割线 --------------- "); //文艺算法,递归 int[] countNumber2=new int[10]; for(int i=0;i<countNumber2.Length;i++) { countNumber2[i]=DiGui(i); } foreach(var Num2 in countNumber2) { Console.Write(Num2 +" "); } Console.ReadKey(); } public static int DiGui(int j) { int s; if(j==0||j==1) { s=j+1; } else { s=DiGui(j-1)+DiGui(j-2); //调用方法本身 } return s; } } }
传送门:递归经典算法
传送门:递归算法为什么那么慢?