有段話來理解遞歸,感覺不錯:
你打開面前這扇門,看到屋里面還有一扇門。你走過去,發現手中的鑰匙還可以打開它,你推開門,發現里面還有一扇門,你繼續打開它。若干次之后,你打開面前的門后,發現只有一間屋子,沒有門了。然后,你開始原路返回,每走回一間屋子,你數一次,走到入口的時候,你可以回答出你到底用這你把鑰匙打開了幾扇門。
遞歸的精髓:
遞歸就是有去(遞去)有回(歸來),如下圖所示。“有去”是指:遞歸問題必須可以分解為若干個規模較小,與原問題形式相同的子問題,這些子問題可以用相同的解題思路來解決,就像上面例子中的鑰匙可以打開后面所有門上的鎖一樣;“有回”是指 : 這些問題的演化過程是一個從大到小,由近及遠的過程,並且會有一個明確的終點(臨界點),一旦到達了這個臨界點,就不用再往更小、更遠的地方走下去。最后,從這個臨界點開始,原路返回到原點,原問題解決。
遞歸的三要素:
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; }
