1.題目:
漢諾塔(hanoi tower),又稱河內塔,源於印度乙個古老傳說。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片**圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,任何時候,在小圓盤上都不能放大圓盤,且在三根柱子之間一次只能移動乙個圓盤。問應該如何操作?
2.分析:
這個問題顯然需要用遞迴演算法來解決,我們知道遞迴可以理解為方程式是f(n) = f(n-1) + a;那麼我們可以這樣來看待這個問題:
首先明確,我們的目標是將a上所有n個盤子移動至c。而對於b,我們可以將之看成乙個中轉站。那麼就有下面這三步:
1.把 n-1 號盤子移動到緩衝區(a–>b)
2.把1號從起點移到終點(a–>c)
3.然後把緩衝區的n-1號盤子也移到終點。(b–>c)
3.來看看**:
public
static
void
move
(char pos1,
char pos3)
public
static
void
hanoi
(int n,
char pos1,
char pos2,
char pos3)
hanoi
(n-1
,pos1,pos3,pos2)
;//開始位置,中途轉接位置,目的位置
move
(pos1,pos3)
;hanoi
(n-1
,pos2,pos1,pos3)
;//開始位置,中途轉接位置,目的位置
}public
static
void
main
(string[
] args)
執行結果:
總結::
對遞迴的理解的要點主要在於放棄!
放棄你對於理解和跟蹤遞迴全程的企圖,只理解遞迴兩層之間的交接,以及遞迴終結的條件!
遞迴演算法 漢諾塔問題
圖1 漢諾塔分析 三個過程 漢諾塔問題,經典遞迴問題 遞迴問題的關鍵 1.如何縮小問題的規模 2.如何解決最簡單問題 即 1找出遞迴體,2找出遞迴出口 試圖追蹤程式執行過程,都是徒勞的 2018年4月10日10 49 46 by 楷諧之力 includevoid move char frm,char...
遞迴演算法 漢諾塔問題
程式呼叫自身的程式設計技巧稱為遞迴。乙個過程或函式在其定義或說明中又直接或間接地呼叫自身的一種方法,通常把乙個大型複雜的問題層層轉化為乙個與原問題相似的規模較小的問題來求解。遞迴策略只需少量的程式就可描述出解題過程所需要的多次重複計算,大大地減少了程式的 量。遞迴的能力在於用有限的語句來定義物件的無...
漢諾塔 遞迴演算法
個人覺得漢諾塔這個遞迴演算法比電子老鼠的難了一些,不過一旦理解了也還是可以的,其實網上也有很多 可以直接參考。記得大一開始時就做過漢諾塔的習題,但是那時 寫得很長很長,也是不理解遞迴的結果。現在想起來漢諾塔的演算法就3個步驟 第一,把a上的n 1個盤通過c移動到b。第二,把a上的最下面的盤移到c。第...