递归算法之汉诺塔问题的算法思路和代码

汉诺塔问题

题目:
有n个圆盘,依半径大小(半径都不同),自上而下套在a柱上,每次只允许移动最上面一个盘子到另外的柱子上去(除a柱外,还有b柱和c柱,开始时这两个柱子上无盘子),但绝不允许发生柱子上出现大盘子在上,小盘子在下的情况,现要求设计将a柱子上的n个盘子搬移到c柱去的方法。

【算法分析】

①、当n=1时,只有一个盘子,把p1移动到另一根柱子上需要移动1次:a->c;
因为n=1时,需要把p1这一个盘子移到另一根柱子(c)需要移动1次

②、当n=2时,将p1和p2这两个盘子移动到另一根柱子上需要移动3次:a——1——>b,a——2——>c,b——3——>c;
因为n=2时,由①可知,
–把p1移动到另一根柱子(b)需要移动1次:a->b
–把p2移动到另一根柱子(c)上需要移动1次:a->c
–把p1移动到另一根柱子(c)上需要移动1次:b->c

大局观:把(n-1)个盘子看成一个整体,总目标为把N个盘子from a到c,先把(n-1)个盘子from a到b,然后第n个盘子from a到c,最后(n-1)个盘子from b到c

③、当n=3时,把p1、p2、p3这三个盘子移动到另一根柱子上需要移动7次:因为由②可知,
–将p1和p2这两个盘子移动到另一根柱子(b)上需要移动3次-
–将p3这个盘子移动到另一根柱子(c)只需1次
–将p1和p2这两个盘子移动到另一根柱子(c)上需要移动3次。

大局观:把(n-1)个盘子看成一个整体,总目标为把n个盘子from a到c(a为源柱,c为目标柱,b为过渡柱),先把(n-1)个盘子from a到b(c为过渡柱,a为源柱,b为目标柱),再把第n个盘子from a到

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值