递归函数练习

求解汉诺塔问题

问题描述:
有三根相邻的柱子,标号为A,B,C,A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘,要把所有盘子一个一个在三个柱子间移动,并且每次移动同一根柱子上都不能出现大盘子在小盘子上方,最后使得n个圆盘也按金字塔状叠放到C柱子上。请问当n取不同的值时,圆盘的移动方法?

下面展示代码。

def move(id, ori, to):
    #步骤打印函数,展示具体移动过程
    global step
    print("第{}步: 将第{}块从{}移至{}".format(step, id, ori, to))
    step += 1

def hanoi(n, x, y, z):
    #解决汉诺塔问题
    if n == 0:
        return
    hanoi(n - 1, x, z, y);
    move(n, x, z);
    hanoi(n - 1, y, x, z);

#调用函数
print("将圆盘从上到下顺序编号")
n=int(input("当圆盘的数量为"))
print("完成移动的步骤为:")
step = 1
hanoi(n, 'A', 'B', 'C', )

运行结果
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值