遞歸的精髓是什么?


有段話來理解遞歸,感覺不錯:

你打開面前這扇門,看到屋里面還有一扇門。你走過去,發現手中的鑰匙還可以打開它,你推開門,發現里面還有一扇門,你繼續打開它。若干次之后,你打開面前的門后,發現只有一間屋子,沒有門了。然后,你開始原路返回,每走回一間屋子,你數一次,走到入口的時候,你可以回答出你到底用這你把鑰匙打開了幾扇門。

遞歸的精髓:

遞歸就是有去(遞去)有回(歸來),如下圖所示。“有去”是指:遞歸問題必須可以分解為若干個規模較小,與原問題形式相同的子問題,這些子問題可以用相同的解題思路來解決,就像上面例子中的鑰匙可以打開后面所有門上的鎖一樣;“有回”是指 : 這些問題的演化過程是一個從大到小,由近及遠的過程,並且會有一個明確的終點(臨界點),一旦到達了這個臨界點,就不用再往更小、更遠的地方走下去。最后,從這個臨界點開始,原路返回到原點,原問題解決。 

遞歸的三要素:

1、明確遞歸終止條件;

2、給出遞歸終止時的處理辦法;

3、提取重復的邏輯,縮小問題規模。
上代碼:
  static void Main(string[] args)
        {          
           int n= Digui1(3);
            Console.WriteLine(n);
            Console.ReadLine();
        
        }
        private static int Digui1(int j)
        {
            if (j == 0)
                return 0;
            int i = Digui1(j - 1);//第一次:j=2;  j=1;j=0;遞進去的值
            int n= i + j;//j=1,i=0;j=2,i=1;j=3,i=3;歸來的值
            return n;//n=1;n=3;
        }

 

 


免責聲明!

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



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