【发布时间】:2017-10-18 20:34:35
【问题描述】:
目前我正在阅读 Douglas Crockford 的书,河内塔楼功能有点超出我的想象。即使将内容记录到控制台,我也无法真正理解发生了什么。这是我添加的功能:
var hanoi = function (disc, src, aux, dst) {
console.log(disc);
console.log(src, dst);
if (disc > 0) {
hanoi(disc - 1, src, dst, aux);
console.log('Move disc ' + disc + ' from ' + src + ' to ' + dst);
hanoi(disc - 1, aux, src, dst);
}
}
hanoi(3, 'Src', 'Aux', 'Dst');
这会导致以下结果:
3
源地址
2
源辅助
1
源地址
0
源辅助
将磁盘 1 从 Src 移动到 Dst
0
辅助 Dst
将光盘 2 从 Src 移动到 Aux
1
Dst 辅助
0
Dst Src
将光盘 1 从 Dst 移动到 Aux
0
源辅助
将磁盘 3 从 Src 移动到 Dst
2
辅助 Dst
1
辅助源
0
辅助 Dst
将磁盘 1 从 Aux 移动到 Src
0
Dst Src
将光盘 2 从 Aux 移动到 Dst
1
源地址
0
源辅助
将磁盘 1 从 Src 移动到 Dst
0
辅助目的地
而且我很早就迷路了。结果第6行,怎么从Src Aux回到Src Dst?
当函数只使用“disc - 1”调用自身时,磁盘的数量一旦达到 0 怎么能再次增加?
【问题讨论】:
-
如果你读过 Crockford 的学习 JavaScript 的书,你可以跳过这部分,因为它与 JavaScript 语言本身无关,而且算法也不是微不足道的。当然,如果你还有兴趣,可以查看维基百科的解释:en.wikipedia.org/wiki/Tower_of_Hanoi
-
理论上我理解这个问题和解决方案,但我不明白这个功能是如何工作的(还)。所以对于我作为 JS 程序员的发展,理解这一点并不是无关紧要的,即使我知道你的意思。非常感谢您的意见。
标签: javascript recursion towers-of-hanoi