漢諾塔塔問題符合數學統計歸納,千萬別試圖去理解n層移動問題(或者說去理解n層遞迴,人腦真不夠用),理解3層漢諾塔問題就行。
總結起來如下:
遞迴的理解的要點主要在於放棄!放棄你對於理解和跟蹤遞迴全程的企圖,只理解遞迴兩層之間的交接,以及遞迴終結的條件。
如果a柱子只剩乙個盤子,那麼直接移動到c柱子即可
把 n-1 號盤子移動到緩衝區
把1號從起點移到終點
然後把緩衝區的n-1號盤子也移到終點
/*1.要從a到b 那c就是緩衝 move(n-1,from,to,buffer)
2.要從a到c 那b就是緩衝 move(1,from,buffer,to)
3.要從b到c 那a就是緩衝 move(n-1,buffer,from,to)
*///
漢諾塔移動框架
void
move(n,from,buffer,to)
move(n-1,from,to,buffer);
move(1,from,buffer,to);
move(n-1,buffer,from,to);
}void removeto(listfrom, listto)
//漢諾塔問題解釋https:
public
void hanota(lista, listb, listc)
private
void remove(int n, listfrom, listbuffer, listto)
//1.把 n-1 號盤子移動到緩衝區
//把a柱子上面的n-1個盤子,借助輔助柱子c,放到柱子b上
remove(n - 1, from, to, buffer);
//2.把1號從起點移到終點
//此時a柱子剩下那個盤子是n個盤子中最大的那個,把他移動到c柱子上
remove(1, from,buffer,to);
//3.然後把緩衝區的n-1號盤子也移到終點
//最後把剛才放在b柱子上的n-1個盤子,借助柱子a輔助,放到柱子c上
remove(n - 1, buffer, from, to);
}private
void removeto(listfrom, listto)
python 漢諾塔 Python漢諾塔
import turtle class stack def init self self.items def isempty self return len self.items 0 def push self,item def pop self return self.items.pop def ...
漢諾塔問題(思路及實現)
什麼是漢諾塔?遞迴思路 當只有乙個盤子的時候,只需要從將a塔上的乙個盤子移到c塔上。當a塔上有兩個盤子是,先將x塔上的1號盤子 編號從上到下 移動到y塔上,再將x塔上的2號盤子移動的z塔上,最後將y塔上的小盤子移動到z塔上。當x塔上有3個盤子時,先將x塔上編號1至2的盤子 共2個 移動到y塔上 需借...
漢諾塔合集之漢諾塔3
漢諾塔3 步驟分析 1.當只有乙個圓盤時,要從a到b再到c 2.同樣擴充套件經典漢諾塔問題來看,先把a柱上 n 1 個圓盤,經b移動到c 3.把最後乙個圓盤從a移動到b 4.把c柱上的 n 1 個圓盤,經b移動 移回 到a 5.把b上的最後乙個圓盤從b移到c 6.最後把a上的 n 1 個圓盤經過b移...