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;
        }
    }
}

传送门:递归经典算法

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

 

posted on 2016-02-23 16:25  哥不寂寞  阅读(2664)  评论(1编辑  收藏  举报

导航