深入理解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柱子看做辅助柱。


你可能感兴趣的:(Python)