#汉诺塔问题
'''移动的规则
1.每次只能移动一个圆盘
2.圆盘可以插在任意一座塔上
3.任何时候都不能将一个较大的圆盘压在一个较小的圆盘上'''
count=0 #计算移动的次数
def hanoi(n,src,dst,mid):#n代表圆盘的个数,src代表第一座塔,dst代表目标塔,mid代表辅助塔
#利用递归的方法
#递归基例
global count #通过global保留字在函数内部声明全局变量
if n==1:
move(1,src,dst) #将编号为1的圆盘从A移到B
count=count+1
#递归链条
else:
hanoi(n-1,src,mid,dst) #将n-1个圆盘移到mid上,dst作为辅助塔
move(n,src,dst) #将最底层的圆盘移到dst上
count=count+1
hanoi(n-1,mid,dst,src) #将mid塔上的圆盘移到dst上
def move(n,a,b):
print("{}:{}->{}".format(n,a,b))
hanoi(4,"A","B","C")
print(count)
结果:
1:A->C
2:A->B
1:C->B
3:A->C
1:B->A
2:B->C
1:A->C
4:A->B
1:C->B
2:C->A
1:B->A
3:C->B
1:A->C
2:A->B
1:C->B
15
这里主要运用到了递归的思想
1.首先确定递归基例
就是在最特别的情况下是怎么样进行的
2.然后确定递归链条
在一般情况下