目前我正在阅读 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
Src Dst
2
Src Aux
1
Src Dst
0
Src Aux
将光盘 1 从 Src 移动到 Dst
0
Aux Dst
将光盘 2 从 Src 移动到 Aux
1
Dst Aux
0
Dst Src
将光盘 1 从 Dst 移动到 Aux
0
Src Aux
将光盘 3 从 Src 移动到 Dst
2
Aux Dst
1
Aux Src
0
Aux Dst
将光盘 1 从 Aux 移动到 Src
0
Dst Src
将光盘 2 从 Aux 移动到 Dst
1
Src Dst
0
Src Aux
将光盘 1 从 Src 移动到 Dst
0
辅助目的地
我很早就迷路了。在结果的第 6 行,它如何从 Src Aux 回到 Src Dst?
当函数仅使用“disc - 1”调用自身时,一旦达到 0,磁盘数量如何再次增加?