深入理解python遞迴函式:漢諾塔遊戲
if n==1:
print (zhu1+' --> '+zhu3)
else:
hanota(n-1, zhu1, zhu3, zhu2)
print (zhu1+' ==> '+zhu3)
hanota(n-1, zhu2, zhu1, zhu3)
n=int(input('munber of hanota'))
hanota(n,'1柱子','2柱子','3柱子')
n=2時:
hanota(2,1,2,3)
n=2≠1
hanota(1,1,3,2)
n=1
print(1-2)
print(1=3)
hanota(1,2,1,3)
print(2-3)
對比
1柱子 --> 2柱子
1柱子 ==> 3柱子
2柱子 --> 3柱子
n=3時
hanota(3,1,2,3)
n=3≠1,進入else
hanota(2,1,3,2)
n=2≠1,進入else
hanota(1,1,2,3)
n=1,進入if
print(1--3)
print(1==2)
hanota(2,2,1,3)
n=2≠1,進入else
hanota(1,2,3,1)
n=1,進入if
print(2-1)
print(2=3)
hanota(1,1,2,3)
print(1-3)
1柱子 --> 3柱子
1柱子 ==> 2柱子
3柱子 --> 2柱子
1柱子 ==> 3柱子
2柱子 --> 1柱子
2柱子 ==> 3柱子
1柱子 --> 3柱子
我們知道:
如果漢諾塔只有一層:那麼就是從1柱子==》3柱子
如果漢諾塔有兩層:那麼:
1柱子 --> 2柱子(小的)
1柱子 ==> 3柱子(大的)
2柱子 --> 3柱子(小的)
即:先把小的放到2柱子上,再把大的放到3柱子上。
如果漢諾塔有三層:那麼:
把中的和小的看成一個小的。
先把中的和小的,從1柱子-->2柱子上;
再把大的從1柱子--3柱子上。
再把中的和小的--3柱子上。
由於大的永遠在最底下,同時目標柱子不變。
在移動中的和小的時候,把他們所在的2柱子看做主柱子,把1柱子看做輔助柱。