你的位置:首页 > ASP.net教程

[ASP.net教程]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;    }  }}

传送门:递归经典算法

传送门:递归算法为什么那么慢?