這段時間老是看到遞迴,認真研究後,我感覺遞迴的思想十分獨特,也十分常見。它是將某個問題分解成許多相似的問題,然後不斷重複這個過程。而妙就妙在這個重複的過程中可以有許多分叉,經典的例子便是n階hanoi塔問題。
hanio塔問題:假設有三個分別命名為x,y,z的塔座,在塔座x上插有n個直徑大小各不相同、依小到大編號為1,2,3,...,n 的圓盤。現要求將x軸上的n個圓盤移至塔座z上並仍按同樣順序疊排,圓盤移動時必須遵循下列規則:
(1) 每次只能移動乙個圓盤;
(2) 圓盤可以插在x,y,和z中的任一塔座上;
(3) 任何時刻都不能將乙個較大的圓盤壓在較小的圓盤之上。
求搬動次數。
則其標準解法為(嚴蔚敏 資料結構 p55):
1void hanoi(int n,char x,char y,charz)2
//將塔座x上按直徑由小到大且自上而下編號為1至n的n個圓盤按規則搬到3//
塔座z上,y可用作輔助塔座4//
搬動操作move(x,n,z)可定義為(c 是初值為0的全域性變數,對搬動計數):5//
printf("%i.move disk %i from %c to %c\n",++c,n,x,z); 6
14 }
這段**中,在else語句中分叉成兩部分,將y上的圓盤移到z。而後並不考慮具體操作。
所以,對於遞迴的理解是:對於乙個有多個重複操作的問題,考慮其最後一步或幾步操作,而後將問題不斷削減,直至最後一步或最後幾步。而在這個過程中,可以有分叉。
《C Primer Plus》讀書筆記 遞迴
乙個函式呼叫其本身,此呼叫過程為遞迴 recursion 舉個栗子 用來測試upanddown函式的驅動程式 include void upanddown int int main void void upanddown int n 輸出如下 最簡單的遞迴形式。把遞迴呼叫語句放在函式結尾 retur...
具體數學讀書筆記 之遞迴問題
遞迴 定義 給出乙個邊界值,以及乙個用前面的值給出的一般值的方程。邊界值有時不存在 求解遞迴式的方法 猜出正確的解 研究小的情形 數學歸納法 定義 證明某個問題對所有滿足n n0的整數n都成立的一般方法。步驟 首先我們可以在n取最小值n0時證明該命題 基礎 然後假設該命題n0和n 1之間都得到證明,...
mysql運維 讀書筆記 Mysql 讀書筆記
mysql儲存時間有兩種型別 datetime和timestamp。分別說一下兩者的區別。datetime,以8位元組儲存時間,理論上可以從0000年儲存到9999年。並且沒有時區的概念,它儲存的就是乙個時間點的概念。timestamp和datetime最主要的不同就是,它是以4個位元組儲存,由19...