7

私は一般的にプログラミングに非常に慣れていないため、このフィボナッチ数列の例を理解するのに苦労しています。

var fib = [0, 1];
for (var i = 2; i < n; i++) {
    fib[ i ] = fib[ i - 1 ] + fib[ i - 2 ];
    console.log(fib);
}

最初の反復では、インデックス 2 は 1 に等しく、単純です。しかし、i = 3 で 2 回目の反復を試みると、次のようになります。

fib[ 3 ] = fib[ 3 - 1 ] + fib[ 3 - 2 ];  
fib[ 3 ] = fib[ 2 ] + fib[ 1 ]; 
fib[ 3 ] = fib[ 3 ];

私の考えのどこが間違っているのでしょうか?これまでのところ、私は持っています:

var fib = [0,1,1,3]

私が知っていることは正しくありません。

4

6 に答える 6

7

コードについて推論するときは、 から にジャンプfib[3] = fib[2] + fib[1]fib[3] = fib[3]ます。これはたまたま正しいステートメントをもたらす変換ですが、それがどのように機能するかではありません。このコードは、 index の値を index の値に追加してい2ます1。これは、 index で値を取得することと同じではありません3。この推論が機能する方法は次のとおりです。

から始めfib = [0, 1]ます。次に、ループの最初の繰り返しでfib[2] = fib[1] + fib[0]. これは、配列の末尾に配置した値 ( ) を取得するために、インデックス (たまたま) の値をインデックス(たまたま0)の値に追加することを意味します。次に、2 回目の繰り返しで、同様のことを行い、インデックス(まだ) の値をインデックス(同じく ) の値に追加して、配列の最後にあるを取得します。これが続き、各反復で、配列内の最後の 2 つの値を加算して次の値を取得します。011111212

JavaScript では、 のような配列を使用する場合fib、はこの配列の から数えて 番目の値をfib[i]参照します。配列の最初の要素、配列の 2 番目の要素なども同様です。i0fib[0]fib[1]

于 2012-09-27T23:48:54.800 に答える
2
fib[ 3 ] = fib[ 3 - 1 ] + fib[ 3 - 2 ];  
fib[ 3 ] = fib[ 2 ] + fib[ 1 ]; 
fib[ 3 ] = fib[ 3 ];

インデックスが指す配列の値ではなく、インデックスを追加しています

fib[ 3 ] = fib[ 3 - 1 ] + fib[ 3 - 2 ];  
fib[ 3 ] = fib[ 2 ] + fib[ 1 ]; 
fib[ 3 ] = 1 + 1;

[0,1,1,2]

fib[0] = 0
fib[1] = 1
fib[2] = 1
fib[3] will equal 2

だから次の繰り返し

fib[4] = fib[4-1] +fib[4-2]
fib[4] = fib[3] + fib[2]
fib[4] = 1 + 2
fib[4] = 3
于 2012-09-27T23:58:55.480 に答える
1

あなたのコードは大丈夫です。これを実行すると、適切な出力が得られました。

var fib = [0, 1];
for (var i = 2; i < 10; i++) {
    fib[ i ] = fib[ i - 1 ] + fib[ i - 2 ];
    console.log(fib);
}

コンソール: 0,1,1,2,3,5,8,13,21,34

于 2012-09-27T23:47:42.170 に答える
0

さて、なぜあなたはあなたの計算でこれをしたのですか

fib[3] = fib[2] + fib[1]
fib[3] = fib[3]

配列を扱っている場合、インデックスの合計で表されるインデックスの値は、それらのインデックスの配列の値の合計と等しくありません。

簡単に言えば、紙の上で角かっこ内の数字を足すことはできません。5 ドルと 15 ドルが入った財布が 2 つあるようなものです。1+1 は 2 で、2 番目のウォレットを調べるため、15 ドルを持っているとは言えません。合計金額を見つける代わりに、ウォレットの「内容」を追加します。どっちが20

于 2012-09-28T00:04:41.280 に答える
0
fib[ 3 ] = fib[ 3 - 1 ] + fib[ 3 - 2 ];  
fib[ 3 ] = fib[ 2 ] + fib[ 1 ]; 
fib[ 3 ] = fib[ 3 ];

したがって、問題は 2 行目にあります。[] 括弧内の数字はインデックスであり、配列のどの部分を読み取る必要があるかを示します。+ 演算子が適用されると、それらは加算されませんが、代わりに 2 つのfib[2]fib[1]が対応するデータに評価されます。112

これが理解できることを願っています。そうでない場合は、コメントで質問してください。

于 2012-09-27T23:50:44.077 に答える