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

傳送門:遞歸經典算法

傳送門:遞歸算法為什么那么慢?

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM