漢諾塔的遞迴解法

2021-09-11 04:17:50 字數 593 閱讀 8425

遇到這題,就覺得我的理解能力和表達能力不行,用了好長時間把這題弄懂,然而又不知道怎麼用語言表述。。。

要先找到 n =1的是基例,當只有一塊時,直接從a移動到c就完成了

然後再解決n的問題,都可以看成:先把 a柱(n-1)個盤子,先從a 移動到b, 再將a最後乙個盤子從a 移動到c,最後將n-1個盤子從b移動到c

永遠記著:函式引數s,m,e所代表的意思是位置,分別代表起點,中點,終點,盤子移動只在s,e移動,如果從a柱移動到b柱子,b柱就是終點,引數就改為(s,e,m),從b柱移動到c柱,b柱就為起點,c柱為終點(m,s,e)

def

hanoi

(n,s,m,e)

if n ==1:

print

(s,'-->'

,e)else

: hanoi(n-

1,s,e,m)

print

(s,'-->'

,e)return hanoi(n-

1,m,s,e)

print

(hanoi(3,

'a',

'b',

'c')

漢諾塔遞迴解法

解題思路 1 當只有乙個圓盤時,只需將其從 塔a移至目標塔c 不需要借助輔助塔b 2 當有兩個圓盤時,需要先把1號圓盤移至輔助塔b,將2號圓盤移至目標塔c,再將輔助塔b上的1號圓盤移至目標塔c即可。3 當有三個圓盤時,需要先把1號 2號圓盤移至輔助塔b,將3號圓盤移至目標塔c,再將輔助塔b上的1號 ...

漢諾塔問題的遞迴解法

漢諾塔問題的遞迴解法 實現程式 include using namespace std void move int n,char i,char j void hanoi int n,char x,char y,char z int main 執行結果 以下是3層漢諾塔的解法 把1號從x移動到z 把2...

漢諾塔遞迴及非遞迴解法

1.經典遞迴解法 include void mov char a,char b void recursive hanoi int n,char a,char b,char c int main 2.非遞迴解法 從漢諾塔的遞迴解法可以看出,它跟二叉樹中序遍歷遞迴解法是乙個道理。既然二叉樹非遞迴解法能寫...