汉诺塔数学原理及shellscript代码实现

本文探讨了汉诺塔问题的数学原理,包括递归思想和最少移动次数,并提供了使用shellscript实现汉诺塔问题的代码示例。
摘要由CSDN通过智能技术生成

汉诺塔

汉诺塔是根据一个印度传说形成的数学问题:

有三根杆子A, B, C. A杆上有n个穿孔圆盘, 盘的尺寸由下到上依次变小.

要求按照下列规则将所有圆盘移至C杆:

  1. 每次只能移动一个圆盘
  2. 大盘不能叠在小盘上面

找出最少需要移动多少次, 并打印移动的方案.

思考

  • 汉诺塔的目标是将磁盘移动到C杆上,且保持原盘与A杆相同的顺序

  • 两个条件:一是一次只能移动一个圆盘,二是不能在较小的圆盘下放置较大的圆盘

  • 如果有三个圆盘会发生什么?

    • 首先我们忽略最大的圆盘,先考虑如何将剩下的圆盘移动到B杆
    • 我们可以用移动2个圆盘的方式移动,将其他圆盘移动到B杆,在将最大的移动到C杆上
    • 在用移动B杆2个圆盘的方式,将B杆的圆盘移动到C杆上
  • 依照这个流程,将它抽象为归纳思考

    • 1个圆盘可以直接达成目标
    • 假设有n个圆盘,我们可以达成目标,那n+1个圆盘呢?
    • 我们将忽略最大的圆盘,将剩余n个圆盘移动到B杆上,然后将最大的圆盘移动到C杆上
    • 再将整个B杆上的圆盘移动到C杆上
    • 所以:移动的步数为2次n个圆盘的移动步数再加一次n+1号圆盘移动的步数

解决方案:

  • 假设有n个盘,我们就需要使用n-1的汉诺塔移动方案
  • 假设有n-1个盘,我们就需要n-2的汉诺塔解决方案,明白了吧,可以用到递归解决
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值