2017-05-14 7 views
3

フィボナッチ数をnまで印刷しようとしています。以下のコードは、何らかの理由で最後の数字を2回出力します。助けてください。フィボナッチの最後の2つの数字を印刷

function fibonacci(n) { 
    let i; 
    const fib = []; 

    fib[0] = 0; 
    fib[1] = 1; 

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

答えて

2

あなたはインデックスまたは合計を押すだけで、どちらかの値を割り当てる必要があります。

function fibonacci(n) { 
 
    let i; 
 
    const fib = []; 
 

 
    fib[0] = 0; 
 
    fib[1] = 1; 
 

 
    for (i = 2; i < n; i++) { 
 
     fib[i] = fib[i - 2] + fib[i - 1]; // either this assignm. or the next line only 
 
     // fib.push(fib[i - 2] + fib[i - 1]); 
 
    } 
 
    return fib; 
 
} 
 

 
console.log(fibonacci(8));

+0

ありがとうございますが、コードはn = 1のためには動作しません。 – MaxES

+0

@MaxES、それはあなたが好むスタイルに依存します。 [wikipedia](https://en.wikipedia.org/wiki/Fibonacci_number)によると、チェックを追加し、必要に応じて最初の値を設定することができます。 –

1

あなたは間違ってそれをやっている:あなたは、最初の配列のn番目の要素を作成し、その後、あなたはそれを複製、配列の同じ要素を押してください。 pushコマンドは必要ありません。

正しいコードは次のようになります。

function fibonacci(n) { 
 
     let i; 
 
     const fib = []; 
 
    
 
     fib[0] = 0; 
 
     fib[1] = 1; 
 
    
 
     for (i=2; i<n; i++) { 
 
     fib[i] = fib[i-2] + fib[i-1]; 
 
     } 
 
     console.log(fib); 
 
    } 
 
    fibonacci(5);

1
function fibonacci(n) { 
    let i; 
    const fib = []; 

    fib[0] = 0; 
    fib[1] = 1; 

    for (i=2; i<n; i++) { 
    fib[i] = fib[i-2] + fib[i-1]; 
    // Remove the following line as you are already assigning the value in the line above. 
    //fib.push(fib[i]); 
    } 
    console.log(fib); 
} 
2

は、単にその後

fib.push(fib[i]); 

削除します10

は、出力を与える:

[ 0, 1, 1, 2, 3, 5, 8 ] 

更新

コメントした後、私はfib[1]の定義を除去し、合計でiを与えるi=1

"use strict"; 

function fibonacci(n) { 
    let i; 
    const fib = []; 

    fib[0] = 0; 

    for (i=1; i<n; i++) { 
     fib[i] = ((fib[i-2]!==undefined)?fib[i-2]:1) + fib[i-1]; 
    } 
    console.log(fib) 
} 

fibonacci(1); 
fibonacci(2); 
fibonacci(7); 

[ 0 ] 
[ 0, 1 ] 
[ 0, 1, 1, 2, 3, 5, 8 ] 

のためにそれの可能性使用を作るために、コードを固定しましたfib[i-2]undefintedの場合にのみ要素使用値1がこの条件を満たしていることを示しますイオンはi=1の場合にのみ、ループ開始が1であるが、テーブルfibからは-1というキーがないために満たされます。 i1より大きい場合、fib[i-2]が存在し、式の値がより早くなります。

+1

ありがとう、しかし、私はコードがn = 1のために動作しないことに気づいた – MaxES

関連する問題