Tower of Hanoi的理解

汉诺塔之前一直是知道过程,理解不了代码。直到今天在知乎上看到一种理解方式,一下子就懂了。
如何理解汉诺塔的递归? - 郭风林的回答 - 知乎
https://www.zhihu.com/question/24385418/answer/128213752
作者:郭风林
链接:https://www.zhihu.com/question/24385418/answer/128213752
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

汉诺塔永远只有三步:

image
image
image
image

<noscript>
image
image
image
image
image
image

图中是最常见的五层(五珠)汉诺塔,
其实几层都是一样,这里设为n,
冰箱门永远是汉诺塔上面的m=n-1层。

那么问题来了,怎样把冰箱门打开?
即:怎样把图中的1至4号串珠从A柱移动到B柱?
(三根柱子从左至右依次为A、B、C,五颗串珠从小到大依次为1到5)

这又变成了一道m层汉诺塔的问题(m=n-1)。
你可以继续用把大象装冰箱分几步的思路
去考虑m层汉诺塔的解法。

推导下去最终就得到了一个两层汉诺塔该怎么移动的问题,

这个相信你闭着眼也知道该怎么搞了。

image.png

这个递归代码里面, if disk == 1就是最后只剩一个盘子,直接移动到dest. 然后我们打开冰箱门,也就是把上面四个盘子当作门,一起移动到spare柱;然后我们把大象放进去,也就是把最大的盘子直接放到dest; 最后关上冰箱门,也就是把四个盘子从spare移动到dest. 则完成整个过程。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 引 前段时间做了一道题,要求实现汉诺塔游戏的自动解题动画: 汉诺塔游戏应该都了解规则: 1、将盘子全部移动到塔C2...
    Cloudox_阅读 674评论 0 3
  • 重温汉诺塔: n个盘子的汉诺塔问题的最少移动次数是2^n-1,即在移动过程中会产生2^n个系列。由于发生错移产生的...
    碧影江白阅读 1,532评论 2 3
  • 17岁原本是张扬肆意的青春场,你应该如同四月的莺飞草长一般来迅速飞长,如今的你却像是被人拦腰斩断的杂草一样,无人看...
    爱上鱼的土豆阅读 218评论 2 2
  • 不早不迟 赶着清风 一瓣白色花蕊 一瓣黄色新衣 世界明朗的都是香 我曾苦苦的追寻心里的香 仿佛不曾失去的脸庞 与微...
    2016冰山来客阅读 157评论 0 3
  • 都说“一物降一物”。自以为认真对待了,也尽了力去对应付,但是在姐姐眼里,总感觉远远不够,那份内心深处藏的好好的懒散...
    熏莉阅读 233评论 0 0