汉诺塔问题
汉诺塔问题是给定3个塔a,b,c,其中a称为开始盘,b称为过渡盘,c是目标盘。汉诺塔问题的目标是通过一定的规则把a塔上的盘子移动到c上,使得c塔与a塔上的盘子一模一样 。
汉诺塔游戏的规则是:1、每次只能移动一个盘子
2、任何一次移动,三个塔的状态都必须是小盘子在上,大盘子在下
移动方法: 1:当n=1时,直接把a上的一个盘子移动到c上
2:当n=2时,首先把a塔上小盘子移动到b盘子上, 再把a塔上的大盘子移动到c塔上 最后把b塔上的盘子移到c塔上
3:n>2时,思想是把a塔上面的n-1个小盘子借助于c塔移动到b塔上面去,该部分代码可以使用递归实现。再把a塔上剩下的一个盘子放到c塔上面。其次,将b塔上面的n-1个盘子,借助于a塔移动到c塔上去,该部分也使用递归实现。
#汉诺塔问题的python代码实现
def han(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
# if n>2:把n-1个盘子,从a借助于c移动到b上去,再把a塔剩下的一个放到c塔上
han(n-1,a,c,b) #实现递归调用
print(a,'-->',c)
#再把n-1个盘子,借助于a塔挪到c塔上面去
han(n-1,b,a,c) #实现递归调用
a='A'
b='B'
c='C'
n=4
han(n,a,b,c)
结果显示:
A --> B A --> C B --> C A --> B C --> A C --> B A --> B A --> C B --> C B --> A C --> A B --> C A --> B A --> C B --> C