漢諾塔解題思路

2022-04-11 18:38:22 字數 1152 閱讀 8819

漢諾塔塔問題符合數學統計歸納,千萬別試圖去理解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移...