有名なハノイの塔の問題を解決するための小さな Web ページを作成しています。すべて問題ありませんが、各ステップ (8 ディスクの場合は 255 ステップ) で 3 つのタワーの状態を保存しようとすると、すべてのタワーにディスクを表す 3 つの配列を含む配列の配列またはオブジェクトの配列を使用しようとしましたが、存在する状態のみ8 つのディスク (配列アイテム) が格納されます。それ以外の場合は、空の配列しかありません! 私のコードに従ってください:
class steps //object that store state of towers at each step
{
constructor(src, spr, tgt)
{
this.src = src;
this.spr = spr;
this.tgt = tgt;
}
}
function Hanoi(n, source, target, spare)
{
if(n>0) {
Hanoi(n-1, source, spare, target);
target.push(source.pop());
document.getElementById('output').innerHTML+= source+ " ;" + spare + " ;" + target + "<br/>"; //print data to see what is happening
var obj = new steps(source, spare, target);
console.log(source, spare, target);
src_steps.push(obj); //src_steps is global variable
Hanoi(n - 1, spare, target, source);
}
}
src = [8, 7, 6, 5, 4, 3, 2, 1];
spr = [];
tgt = [];
Hanoi(8, src, spr, tgt);
問題は、印刷された配列には本来あるべきデータが含まれていることですが、オブジェクト配列には 8 つの項目を含む配列しか含まれていないか、8 項目未満の配列は含まれていません。ここで何が起きてるの?