1
 var num = [1,1];
 var total = 0;
 var i = num.length;
 do {
    i++;
    num[i] = num[num.length-1] + num[num.length-2];
    total+=num[i];
    console.log(total);
 }
 while(num[num.length] < 4000000);

私は、うまくいけば私の知識と有用性を拡大するために、プロジェクトオイラーの質問に1日か2日取り組んでいます。2 番目の質問では、フィボナッチ数列を取得する (悪い) 方法を考え出しました。ただし、私のコードは「2」をコンソールに出力する必要がありますが、停止します。私が抱えている別の問題は、「while(X IS TRUE/FALSE) { DO STUFF }」を使用するだけでは機能しないことです。理由はわかりません。

私はおそらくばかげた間違いを犯しているだけですが、誰かが私を啓発してください:)

4

2 に答える 2

3

num.lengthは常に の最後のインデックスよりも 1 大きくなりますnum。つまり、num.lengthが 5 の場合num、インデックスは 0 ~ 4 であり、num[5]存在しません。

利用可能な最高のインデックスになりますnum.length - 1ので、あなたの状態で試してみnum[num.length - 1]てください。

于 2012-10-10T15:43:25.520 に答える
2

配列numには 2 つの要素があるため、num.length(および も) は 2 です。ブロックiの最初のステートメントは です。今は3です。doi++i

を設定num[3]しています。つまりnum、現在は[1, 1, undefined, 1]です。

また、whileあなたはチェックしていnum[num.length]ます。配列はインデックスがゼロであるため、現在の 4 のように、これは決して機能しませんnum.length

私が提案するのはi、要素を設定した後にインクリメントすることです。したがって、新しい要素をプッシュしてから、長さカウンターをインクリメントします。

var num = [1, 1],
    total = 0,
    i = 2;  // we already know the length, no need to get it
do {
    // we don't need the i++ here
    num[i] = num[i - 1] + num[i - 2]; // add the last 2 elements to the end
    total += num[i];
    console.log(total);
}
while (num[i++] < 4000000);  // "i++" increments i and returns its old value
于 2012-10-10T15:49:39.543 に答える