Python汉诺塔问题

汉诺塔问题:

相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如图1)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。

Python汉诺塔问题_第1张图片

来自汉诺塔问题_百度百科 

我们用Python递归的方法可以解决它。

1.确定一个边界,当n=1时,直接把圆盘从A杆移动到C杆即可。

2.对于n个圆盘时,我们可以把问题分为两步,先移动前n-1个圆盘(从A移到B),再移动第n个圆盘(从A移到C),最后再移动n-1个圆盘(从B移到C)。

steps=0
def hanoi(n,a,b,c):
    global steps
    if n==1:
        steps+=1
        print("第{}步: 圆盘{} moving from {} to {}".format(steps,1,a,c))
    else:
        hanoi(n-1,a,c,b)
        print("第{}步: 圆盘{} moving from {} to {}".format(steps,n,a,c))
        steps+=1
        hanoi(n-1,b,a,c)

if __name__=="__main__":
    hanoi(3,"A","B","C")

你可能感兴趣的:(Python,python,算法,递归算法)