汉诺塔问题
Posted forrest-lin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汉诺塔问题相关的知识,希望对你有一定的参考价值。
规则:
- 每次移动一个盘子
- 任何时候大盘子在下面,小盘子在上面
方法:
- 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 > 0):
hano(n-1, a, c, b)
print(a, "-->", c)
hano(n-1, b, a, c)
print("n = 1")
hano(1, "A", "B", "C")
print("-" * 20)
print("n = 2")
hano(2, "A", "B", "C")
print("-" * 20)
print("n = 3")
hano(3, "A", "B", "C")
以上是关于汉诺塔问题的主要内容,如果未能解决你的问题,请参考以下文章