遞迴是演算法中最基礎也是最重要的一部分。但每次我對遞迴的理解都不夠透徹,這次就以漢諾塔程式為例,加深自己對遞迴的理解。
漢諾塔:漢諾塔(又稱河內塔)問題是源於印度乙個古老傳說的益智玩具。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片**圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動乙個圓盤。
規定:三根柱子,若干個盤子,每次只能移動乙個盤子,且要滿足小圓盤不能放在大圓盤下。知道將所有圓盤移動到目標柱子上為止。
我們將所有n個盤子分為兩組temp1,temp2,分別是上面的n-1個盤子和下面的1個盤子。此時,如果想要移動值目標柱子c,我們需要:
1.用乙個方法將temp1從a經過c移動到b
2.將temp2從a移動到c
3.用相同的方法將temp1從b經過a移動到c
接下來的問題是如何將temp1的n-1個盤子從a經過c移動到b。此時問題的規模已經減小了,從n個盤子變為了n-1個盤子。繼續使用上述的方法,分為兩組…
直到分解為乙個盤子的移動。
遞迴思路:
將盤子由開始柱,經過中間柱,移動到目標柱
基本結束條件(最小規模問題):
1個盤子的移動
對於遞迴的理解依然並不透徹。總的來說,遞迴是一種由後往前推的思想。需要確定好遞迴思想和基本結束條件,且要保證問題是在逐漸縮小。
關於遞迴 漢諾塔為例
記得上學時候當時解漢諾塔問題是沒有解出來的,這幾天看遞迴,想起來了,再嘗試一下吧.想啊想,想啊想,很遺憾,最後還是沒能出來正確的結果,很是鬱悶.研究了一下別人解法,發現我的錯誤在於歸納n與n 1的情況是出錯了,也就是如何用n 1來表示n.其實現在看做好遞迴有兩點比較關鍵,一時總結好n的表示式,用n ...
漢諾塔 遞迴演算法
個人覺得漢諾塔這個遞迴演算法比電子老鼠的難了一些,不過一旦理解了也還是可以的,其實網上也有很多 可以直接參考。記得大一開始時就做過漢諾塔的習題,但是那時 寫得很長很長,也是不理解遞迴的結果。現在想起來漢諾塔的演算法就3個步驟 第一,把a上的n 1個盤通過c移動到b。第二,把a上的最下面的盤移到c。第...
漢諾塔遞迴演算法
大學的時候專業課程很差,指導大二學習演算法設計的時候,發現專業課裡比較有趣的一門。專心學習了一學期 最近在學習python發現了乙個遞迴演算法很迷茫,遂研究了一下。簡單來說明一下 首先漢諾塔的規則是1 每次移動一塊 2 小木塊只能放在大木塊上 3 將所有木塊從a柱子移動c柱子木塊上 用幾個變數和常量...