中国大学MOOC课程《Python语言程序设计》第5章 经典汉诺塔问题 解析

#经典汉诺塔问题,数字越小,代表越是顶层的圈圈
count=0
def hanoi(n,src,dst,mid):
    global count
    if n==1:
        print('{}:{}->{}'.format(1,src,dst))
        count+=1
    else:
        hanoi(n-1,src,mid,dst)#想象成上面(n-1)个是一个整体,比下面的第n个要小,这样就简化成2个圈圈的问题了
        #把上面1个(也就是n-1个)从源移到中间过渡下
        print('{}:{}->{}'.format(n,src,dst))#把下面1个,(也就是第n个,最底层的那个最大的)从源移动到目的地
        count+=1#每移动1下计数1次
        hanoi(n-1,mid,dst,src)#再把刚才从源移到中间过渡的那个整体(也就是上面的n-1个),从中间移动到目的地
hanoi(3,'A','C','B')

汉诺塔问题是递归思路的代表题目。好好研究这段代码,就都想明白了

你可能感兴趣的:(python,training)