我看过SO上关于递归函数的其他问题,也读了回答,但我仍然无法理解算法。
var hanoi = function (disc, src, aux, dst) {
if (disc > 0) {
hanoi(disc - 1, src, dst, aux);
document.write('Move disc ' + disc + ' from ' + src + ' to ' + dst);
hanoi(disc - 1, aux, src, dst);
}
}
hanoi(3, 'Src', 'Aux', 'Dst');
document.write(...)是如何运行的?我的逻辑是第一次运行函数时,disc > 3。然后我们递归调用该函数,跳过下面的所有内容,那么document.write怎么有机会运行呢?
我理解递归(做过基本示例),但我仍然看不到如何得到输出。如果有一种方法可以在可视化环境中运行并查看它的操作,那将非常有帮助。
hanoi()
视为前一个hanoi()
的子程序,而不是GOTO
。在这种意义上,它确实让disc
走到了 0,但仍然有三个hanoi
开放,并且它们将继续运行。就像“安妮会在鲍勃离开后离开,鲍勃会在辛迪离开后离开,辛迪会在道格离开后离开”之类的。 - brymck