Tower of Hanoi的理解

作者: greatseniorsde | 来源:发表于2018-03-08 13:23 被阅读0次

汉诺塔之前一直是知道过程,理解不了代码。直到今天在知乎上看到一种理解方式,一下子就懂了。
如何理解汉诺塔的递归? - 郭风林的回答 - 知乎
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. 则完成整个过程。

相关文章

  • Tower of Hanoi的理解

    汉诺塔之前一直是知道过程,理解不了代码。直到今天在知乎上看到一种理解方式,一下子就懂了。如何理解汉诺塔的递归? -...

  • Tower of Hanoi

    有 A、B、C 三根柱子 当前 A 柱套了 n 个圆环 由上至下这 n 个圆环的直径依次变大 要将所有圆环从 A ...

  • Hanoi Tower

    1.问题描述: 有一个梵塔,塔内有A、B、C三个座,A座上有很多个盘子,盘子大小不等,大的在下,小的在上。我们要把...

  • Hanoi Tower

  • python 汉诺塔

    汉诺塔 (https://en.wikipedia.org/wiki/Tower_of_Hanoi) 的移动也可以...

  • Tower of Hanoi(汉诺塔)

    汉诺塔游戏:A,B,C三根柱子,A柱子上有由上至下依由小至大排列的n张碟子,现在要将这n张碟子移动到C柱子上,移动...

  • 汉诺塔问题与递归

    文章也同时在个人博客 http://kimihe.com/更新 汉诺塔问题(Hanoi Tower) 汉诺塔问题的...

  • 递归--汉诺塔(Hanoi Tower)

    前置文章:递归算法:www.jianshu.com/p/703069f3ba3f . 汉诺塔问题是来源于印度传...

  • 227.Mock Hanoi Tower by Stacks

    public class Tower {private Stack disks;// create three ...

  • 汉诺塔问题(Hanoi Tower)

    C语言实现代码 函数Hanoi()功能将n个碟子从a移到c,b为交换的柱子。c也可以为交换柱子,可以指定from ...

网友评论

    本文标题:Tower of Hanoi的理解

    本文链接:https://www.haomeiwen.com/subject/rqqyfftx.html