2018.6.20 学习日志-----汉诺塔问题

#汉诺塔问题
'''移动的规则
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.然后确定递归链条
在一般情况下

猜你喜欢

转载自blog.csdn.net/yk_0311/article/details/80750050