漢諾塔問題
如下圖所示,從左到右有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柱子木塊上 用幾個變數和常量...