1. 程式人生 > >深入理解python遞迴函式:漢諾塔遊戲

深入理解python遞迴函式:漢諾塔遊戲

def hanota(n,zhu1,zhu2,zhu3):
    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柱子看做輔助柱。