私はそれを理解しました。分解すると、コードは次のように実行されます。
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のステートメントが最終的に書き込まれます。