python解决汉诺塔问题(可助于理解递归)

python解决汉诺塔问题(可助于理解递归)

1. 汉诺塔是什么?

在这里插入图片描述

问题:有三个柱子,n个大小不等的圆盘,每次只可以移动一个圆盘,且大圆盘不能压着小圆盘,求需要多少次移动才可以把A柱中的圆盘全部转移到C柱????

考虑一下特殊情况,ABC三柱里面,A柱有且只有一个圆盘。那么只需要:

move: A --> C 移动了 1 次

若有两个圆盘:

move: A --> B 移动了 1 次
move: A --> C 移动了 2 次
move: B --> C 移动了 3 次

若有三个圆盘:

move: A --> C 移动了 1 次
move: A --> B 移动了 2 次
move: C --> B 移动了 3 次
move: A --> C 移动了 4 次
move: B --> A 移动了 5 次
move: B --> C 移动了 6 次
move: A --> C 移动了 7 次

可以看出具体分为3个步骤:

  1. 将A上层n-1个圆盘移动到B,C作为中转站;
  2. 将A剩下的一个圆盘移动到C;
  3. 将n-1个圆盘从B移动到C,A为中转站;
    所谓的汉诺塔问题其实就是重复重复再重复上述的三个步骤。

2. python解决汉诺塔问题

def hanoi(n, a, b, c):
    global i
    if n == 1:  # 递归的收敛条件,当n为1,时,执行移动的操作
        i += 1
        print('move:', a, '-->', c, '移动了', i, '次') 
        return 
    hanoi(n - 1, a, c, b)  # 将A上层n-1个圆盘移动到B,C作为中转站;
    hanoi(1, a, b, c)  # 将A剩下的一个圆盘移动到C;
    hanoi(n - 1, b, a, c)  # 将n-1个圆盘从B移动到C,A为中转站;


i = 0
hanoi(int(input("请问有几个圆盘:")), 'A', 'B', 'C')  # 给定盘子数,a,b,c分别叫A,B,C

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值