汉诺塔问题
- 规则
1、每次移动一个盘子
2、任何时候大盘子在下面,小盘子在上面 - 方法
1、n=1:直接把A上的一个盘子移动到C上,A-》C
2、n=2:
1、把小盘子从A放到B上,A->B
2、把大盘子从A放到C上,A->C
3、把小盘子从B放到C上,B->C
3、n=3:
1、把A上的两个盘子,通过C移动到B上,调用递归实现
2、把A上剩下的一个最大盘子移动到C上,A->C
3、把B上两个盘子,借助于A,移动到C上去,调用递归
4、n=n:
1、把A上的n-1个大盘子,借助于C,移动到B上去,调用递归
2、把A上的最大盘子,也是唯一一个,移动到C上去,A->C
3、把B上n-1个盘子,借助于A,移动到C上去,调用递归
def hano(n,a,b,c):
'''
汉诺塔的递归实现
n:代表几个盘子
a:代表第一个塔,开始的塔
b:代表第二个塔,中间过度的塔
c:代表第三个塔,目标塔
'''
if n==1:
print(a, "-->", b)
return
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)
n=2
hano(n,a,b,c)
n=3
hano(n,a,b,c)
n=5
hano(n,a,b,c)