算法分析:傻瓜式理解汉诺塔递归问题

算法分析:傻瓜式理解汉诺塔递归问题

一、汉诺塔问题规则

设a、b、c是三个塔座,
开始时,a上有n个圆盘自下而上,从大到小地叠放在一起。
现要求将a上的圆盘移到b上,仍按相同顺序叠放

规则1:每次只能移动一个圆盘
规则2:任何时刻都不许将较大的圆盘压在较小的圆盘上
规则1:在满足规则1和2的基础上,可将圆盘移动至a、b、c任一塔座上

二、汉诺塔问题算法原理分析

1. 将n-1个圆盘放到辅助塔c上去
2. 将塔a上第n个最大的圆盘放到最终塔b上去
3. 最后将辅助塔c上的n-1个圆盘放到最终塔b上去

看到这也许还很懵,不着急,下面我来简要地讲解下
第一步,我们可以将问题简化为只有两部分圆盘的问题即,
n-1部分的圆盘和第n个的圆盘(这里我们把n-1个圆盘看作一个整体)
第二步,现在问题就简化为只有两个圆盘的汉诺塔问题,一个大圆盘和一个小圆盘,那么现在我们通过画图来简要看下他们之间如何进行移动
在这里插入图片描述
在这里插入图片描述
这里值得注意的是我们并不去考虑如何移动这n-1个圆盘的具体过程,而是理清其递归算法。
这样我们非常清晰明了地将汉诺塔问题中n个圆盘的移动问题分解成了两次n-1个圆盘的移动问题,这里可以采取递归的方式去完成。

三、汉诺塔问题的递归算法

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值