python递归实现汉诺塔问题-详解

版权声明:未经原作者允许不得转载本文内容,否则将视为侵权 https://blog.csdn.net/springhammer/article/details/88600672

汉诺塔问题

  • 规则:
    每次移动一个盘子
    任何时候大盘子在下面,小盘子在上面
  • 方法:
    n=1: 直接把A上的一个盘子移动到C上, A->C
    n=2:
    把小盘子从A放到B上, A->B
    把大盘子从A放到C上, A->C
    把小盘子从B放到C上, B->C
    n=3:
    把A上的两个盘子,通过C移动到B上去, 调用递归实现
    把A上剩下的一个最大盘子移动到C上, A->C
    把B上两个盘子,借助于A,挪到C上去, 调用递归
    n = n:
    把A上的n-1个盘子,借助于C,移动到B上去,调用递归
    把A上的最大盘子,也是唯一一个,移动到C上,A->C
    把B上n-1个盘子,借助于A,移动到C上, 调用递归
  • 代码实现
def hano(n, a, b, c):
‘’’
汉诺塔的递归实现
n:代表几个盘子
a:代表第一个塔,开始的塔
b:代表第二个塔,中间过渡的塔
c:代表第三个塔, 目标塔
‘’’
if n == 1:
print(a, “–>, c)
return None
if n == 2:
    print(a, "-->", b)
    print(a, "-->", c)
    print(b, "-->", c)
    return None
# 把n-1个盘子,从a塔借助于c塔,挪到b塔上去
hano(n-1, a, c, b)
print(a, "-->", c)
# 把n-1个盘子,从b塔,借助于a塔,挪到c塔上去
hano(n-1,b, a, c)
a =A”
b =B”
c =C
  • 测试:
    n = 1
    hano(n, a, b, c)
    A --> C
    In [8]:
    n = 2
    hano(n, a, b, c)
    A --> B
    A --> C
    B --> C
    In [9]:
    n = 3
    hano(n, a, b, c)
    A --> C
    A --> B
    C --> B
    A --> C
    B --> A
    B --> C
    A --> C
    In [10]:
    n = 5
    hano(n, a, b, c)
    A --> C
    A --> B
    C --> B
    A --> C
    B --> A
    B --> C
    A --> C
    A --> B
    C --> B
    C --> A
    B --> A
    C --> B
    A --> C
    A --> B
    C --> B
    A --> C
    B --> A
    B --> C
    A --> C
    B --> A
    C --> B
    C --> A
    B --> A
    B --> C
    A --> C
    A --> B
    C --> B
    A --> C
    B --> A
    B --> C
    A --> C

猜你喜欢

转载自blog.csdn.net/springhammer/article/details/88600672