2017-05-14 65 views
3

我試圖打印斐波那奇數字至n。由於某種原因,下面的代碼打印出最後一個數字兩次,請幫助。打印最後兩個斐波那契數字

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,這取決於你喜歡的風格。根據[維基百科](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]); 

然後

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]; 
    } 
} 

fibonacci(7); 

對產出:

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

更新

評論我固定的代碼後,使這可能使用情況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[1]定義,總之給人i元素使用價值1他們只有當fib[i-2]undefinted這意味着這個條件離子僅在i=1時才滿足,因爲循環從1開始,但表fib沒有鍵-1。當i大於1時,則存在fib[i-2]並且等式具有如前所述的值。

+1

謝謝,但我已經意識到,代碼不適用於n = 1 – MaxES