1
我被要求执行递归“汉诺塔”,和我心中的工作这样的逻辑:“汉诺塔”递归不是那么简单,因为它似乎
- 移动从开始1个磁盘到缓冲
- 从开始从缓冲器移动到其余目标
- 移动1个磁盘上目标
每个测试除了通过“Towers_of_hanoi(3,开始,目标)”
原来的正确实施是:
- 移动N - 1个磁盘从开始到缓冲区
- 移动1从起点到目标
- 移动N - 从缓冲区1个磁盘到目标
我已经学会了将递归作为解决问题的一种方法,在我看来,两种实现都是这样做的。我的想法与将其分解的正确方法有什么根本的缺陷?
克里斯,我确实看到了这个缺陷,但我觉得奇怪的是,教育工作者并不认为应该提及这些技巧。我所看到的每个视频或演讲都涉及到这个问题,这让我们对该算法有了“刷新”的高层次解释。 那么,如果这种思维方式是递归所必需的,我的算法应该可以正常工作。 (这是一个咆哮:) – user96454 2014-10-26 22:11:56
你的算法确实有效 - 只要它可以将大磁盘放在小磁盘上。如果你通过它,它将整个堆栈移动到缓冲区(倒置的塔),然后移动到目标。 – 2014-10-26 22:14:15
@ user96454作为一个真正教这个并使用Hanoi Towers例子的人,我总是要指出该算法的工作原理是当移动较小的磁盘时,可以忽略较大的磁盘。我很抱歉,任何教这个的人都没有说清楚这一点。 – templatetypedef 2014-10-26 22:15:07