JavaScript中的斐波那契數列


給定的問題陳述要求我們利用JavaScript的功能建立一個類似斐波那契數列的序列。在JavaScript中,我們可以透過遞迴或使用for迴圈來解決這個問題。

什麼是斐波那契數列?

讓我們瞭解一下JavaScript中斐波那契數列的工作原理。

我們知道,斐波那契數列是一個數列,其中每個數字都是前兩個數字之和。該數列從0和1開始。數列中的下一個數字是1(0 + 1),然後是2(1 + 1),3(1 + 2)……以此類推。

上述問題的邏輯

實現斐波那契數列最簡單的方法是使用遞迴方法。

因此,讓我們瞭解給定問題的邏輯。JavaScript中斐波那契數列的遞迴方法將問題分解成更小的子問題。它首先檢查輸入數字是否小於或等於1。如果等於1,則返回該數字,否則則不返回。然後,它將透過遞迴呼叫已定義的函式,並將n-1和n-2作為引數,並將結果相加來計算第n個斐波那契數。

演算法

步驟1 - 宣告一個數字,直到獲得斐波那契數列或生成n項序列。這裡我們將看到兩種實現。

步驟2 - 將n1和n2數字分別宣告為0和1。並將nextDigit數字定義為空。這裡nextDigit將是兩個數字n1和n2的和。

步驟3 - 此步驟將計算並確定我們對兩種程式碼都使用的方 法。如果我們想獲得直到某個數字的輸出,我們將使用while迴圈,該迴圈將執行直到條件nextDigit小於或等於該數字,列印序列。如果我們想要直到n項的輸出,我們將使用for迴圈來迭代給定輸入數字的長度。

步驟4 - 現在轉向步驟三,根據需要列印斐波那契數列。

示例

// code to generate fibonacci sequence up to a certain number
const number = 13;
let n1 = 0, n2 = 1, nextDigit;

console.log('Fibonacci Series is as follows:');
// print 0 and 1 initially
console.log(n1);
console.log(n2);

//adding two consecutive digits
nextDigit = n1 + n2;

while (nextDigit <= number) {

    // print the next digit
    console.log(nextDigit);

    n1 = n2;
    n2 = nextDigit;
    nextDigit = n1 + n2;
}

輸出

Fibonacci Sequence is as follows:
0
1
1
2
3
5
8
13

示例

// code to generate fibonacci series up to n terms
const number = 8;
let n1 = 0, n2 = 1, nextDigit;

console.log('Fibonacci Sequence is as follows:');

//initialize a for loop
for (let i = 1; i <= number; i++) {
    console.log(n1);
    nextDigit = n1 + n2;
    n1 = n2;
    n2 = nextDigit;
}

輸出

Fibonacci Sequence i as follows:
0
1
1
2
3

時間複雜度

生成到某個數字的時間複雜度為O(log n)。因為程式碼使用while迴圈來獲得直到給定數字的序列。該迴圈將持續進行,直到nextDigit大於輸入數字,此時while迴圈將終止。由於while迴圈迭代log以2為底n次,因此這段程式碼的複雜度為O(log n)。第一段程式碼的空間複雜度為O(1),因為所需空間不依賴於輸入大小。

第二種方法的時間複雜度為O(n),n是序列中項的數量。這段程式碼使用for迴圈迭代1到輸入數字的所有範圍。由於迴圈執行到n次,因此複雜度為O(n)。

第二種方法的空間複雜度也是O(n),因為它為迴圈的每一步都儲存值n1和n2。由於這些數字所需的記憶體是恆定的,並且不依賴於輸入大小。因此,在這種情況下,我們忽略空間複雜度的分析。

結論

在這段程式碼中,我們實現了兩種程式碼或演算法。第一段程式碼給出輸出以列印直到某個數字的斐波那契數列。第二段程式碼返回n項的輸出。我們得出的結論是,第一種和第二種方法的時間複雜度分別為O(log n)和O(n)。兩種程式碼的空間複雜度都是O(1)。

更新於:2023年8月23日

瀏覽量:296

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告