我已经想通了。分解后,代码运行如下:
var write = function(string) {
document.write(string);
}
var i = 0;
var hanoi = function(disc,src,aux,dst) {
if (disc > 0) {
hanoi(disc - 1,src,dst,aux);
write("Move disc " + disc + " from " + src + " to " + dst + "<br />");
hanoi(disc - 1,aux,src,dst);
}
};
hanoi(3,"src","aux","dst");
/*
hanoi(3,"src","aux","dst");
if (disc > 0) {
hanoi(2,'src','dst','aux');
if (disc > 0) {
hanoi(1,'src','aux','dst');
if (disc > 0) {
hanoi(0,'src','dst','aux');
END
write("Move disc " + 1 + " from " + src + " to " + dst + "<br />");
hanoi(0,'aux','src','dst');
END
}
write("Move disc " + 2 + " from " + src + " to " + dst + "<br />");
hanoi(1,'dst','src','aux');
if (disc > 0) {
hanoi(0,'src','dst','aux');
END
write("Move disc " + 1 + " from " + src + " to " + dst + "<br />");
hanoi(0,'aux','src','dst');
END
}
}
write("Move disc " + 3 + " from " + src + " to " + dst + "<br />");
hanoi(2,'aux','src','dst');
if (disc > 0) {
hanoi(1,'aux','dst','src');
if (disc > 0) {
hanoi(0,'src','dst','aux');
END
write("Move disc " + 1 + " from " + src + " to " + dst + "<br />");
hanoi(0,'aux','src','dst');
END
}
write("Move disc " + 2 + " from " + src + " to " + dst + "<br />");
hanoi(1,'src','aux','dst');
if (disc > 0) {
hanoi(0,'src','dst','aux');
END
write("Move disc " + 1 + " from " + src + " to " + dst + "<br />");
hanoi(0,'aux','src','dst');
END
}
}
}
*/
最令人困惑的部分是可视化第一个递归循环的 END。只有当 disc == 0 时,disc == 3 的语句才最终被写入。