演算法學習 遞迴之漢諾塔

2022-01-12 10:58:23 字數 1070 閱讀 3491

漢諾塔問題

如下圖所示,從左到右有a、b、c三根柱子,其中a柱子上面有從小疊到大的n個圓盤,現要求將a柱子上的圓盤移到c柱子上去,期間只有乙個原則:一次只能移到乙個盤子且**子不能在小盤子上面,求移動的步驟和移動的次數

1個盤的時候,只需要移動1次即可達成目標,g(1) = 1)(步驟一)

2個盤的時候,需要移動3次即可達成目標,g(2) = 3(步驟二)

3個盤的時候,我們需要將底下較大的兩個盤先移動到c中,之後再將a中剩下的那個盤移動到c中。

這裡需要注意的是,我們是將底下的2個盤當做了乙個,所以是相當於進行了2次步驟二需要2*g(2)次

之後就是步驟一的那種情況 ,需要1次移動

g(3)=2*g(2)+1

通式為g(n)=2*g(n-1)+1

遞迴出口為n=1

system.out.println("請輸入碟片數:");

scanner scanner = new scanner(system.in);

int n = scanner.nextint();

scanner.close();

long result = han(n);

system.out.println("總移動次數為"+result);

遞迴演算法之漢諾塔

遞迴定義 遞迴演算法是把問題轉化為規模縮小了的同類問題的子問題。然後 遞迴呼叫函式 或過程 來表示問題的解。乙個過程 或函式 直接或間接呼叫自己本身,這種過程 或函式 叫遞迴過程 或函式 遞迴演算法解決問題的特點 1 遞迴就是在過程或函式裡呼叫自身。2 在使用遞迴策略時,必須有乙個明確的遞迴結束條件...

漢諾塔 遞迴演算法

個人覺得漢諾塔這個遞迴演算法比電子老鼠的難了一些,不過一旦理解了也還是可以的,其實網上也有很多 可以直接參考。記得大一開始時就做過漢諾塔的習題,但是那時 寫得很長很長,也是不理解遞迴的結果。現在想起來漢諾塔的演算法就3個步驟 第一,把a上的n 1個盤通過c移動到b。第二,把a上的最下面的盤移到c。第...

漢諾塔遞迴演算法

大學的時候專業課程很差,指導大二學習演算法設計的時候,發現專業課裡比較有趣的一門。專心學習了一學期 最近在學習python發現了乙個遞迴演算法很迷茫,遂研究了一下。簡單來說明一下 首先漢諾塔的規則是1 每次移動一塊 2 小木塊只能放在大木塊上 3 將所有木塊從a柱子移動c柱子木塊上 用幾個變數和常量...