python中hanoi问题

这篇博客介绍了汉诺塔游戏的背景和规则,分析了如何通过递归方法解决此问题。文章提供了Python代码来演示如何将所有金盘从A杆移动到C杆,遵循每次只能移动一个盘子且大盘在下、小盘在上的原则。
摘要由CSDN通过智能技术生成

问题
相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如下图)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。
在这里插入图片描述问题分析
如果能把上面n-1个盘子移到B杆上的话,第n个盘子就可以直接移到c杆上。同理,如果能把上面n-2个盘子移到另一个柱子上的话就可以把第n-1个盘子直接移到c杆上。所以要移动哪一个就直接把其上的所有盘子看成整体并把其移动到另一个柱子上从而直接将所要移动的盘子直接移动到c杆。所谓的另一个柱子就是作为中介,将其以上的盘子暂时储存在那里,所以AB杆都有可能是“另一个柱子”。
运行代码

steps = 0
def hanoi(src, des, mid, n):
    global steps
    if n == 1:
        steps += 1
        print("[STEP{:>4}] {}->{}".format(steps, src, des))
    else:
        hanoi(src,mid,des,n-1)
        steps += 1
        print("[STEP{:>4}] {}->{}".format
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值