[譯] 斐波那契數列中的偶數 (Python vs. JavaScript)

ZephyrJS發表於2018-03-15

斐波那契數列中的偶數 (Python vs. JavaScript)

[譯] 斐波那契數列中的偶數 (Python vs. JavaScript)

對於僱主來說,用某種方式來生成斐波那契數列是一道熱門的面試題。而求斐波那契數列中的所有偶數便是其熱門的變體之一。這裡,我將用 Python 和 JavaScript 兩種方式來實現。為了讓事情變得更加簡單,我們將只生成 4,000,000 以下的序列中的偶數,並且對他們進行求和。

什麼是斐波那契數列?

在斐波那契數列中每一個新項都等於前兩項之和。所以,我們就能看到這樣一個例子,從 1 和 2 開始,序列中的前 10 個數字便是:

1, 2, 3, 5, 8, 13, 21, 34, 55, 89

我們將如何生成序列中的所有數字呢?

首先,我們可以通過類似下面這種方式來思考如何生成數列:

[譯] 斐波那契數列中的偶數 (Python vs. JavaScript)

這裡的問題是我們沒辦法為每個數字都建立一個變數,所以更好的解決方案是,每當我們呼叫完 a + b = c 之後,我們將對這三個變數重新賦值。所以現在我們將上一個 b 的值賦給 a,將上一個 c 的值賦給 b,以此類推。它看起來會像是這樣:

[譯] 斐波那契數列中的偶數 (Python vs. JavaScript)

所以初步的想法是,在某個迴圈裡,我們要檢查並確保不要觸發 4,000,000 這個臨界點,然後我們重置 a、b 和 c 的值,緊接著將 c 存入到陣列或列表中。最後我們將對這個陣列或列表進行求和。

虛擬碼的討論到此為止,接下來我們將展示一些例項程式碼,讓我們看看將會是什麼樣子:

Python:

讓我們像虛擬碼那樣開始。我將空陣列賦值給變數 'x'。

x = []
a = 1
b = 2
c = a + b
複製程式碼

接下來,我將使用 Python 的 while 迴圈來檢查並確保 c 的值小於 4000000

while c < 4000000:
    a = b
    b = c
    c = a + b
    if c % 2 == 0:
        x.insert(0, c)
複製程式碼

因為我們只需要偶數,所以在 while 迴圈內部,我們將檢查並確保它是一個偶數,才會執行插入到 x. 的操作。接下來,我們會在 Python 中對這個列表裡的數字進行求和並列印這個值。

numSum = (sum(x))
print numSum
複製程式碼

JavaScript:

我想用 JavaScript 的方式去解決,但它跟 Python 相比會有些許差異。首先我將建立一個空陣列,然後對陣列的前兩個索引賦值:

var fib = [];

fib[0] = 1;
fib[1] = 2;
複製程式碼

接著,我將迴圈陣列。選擇我需要的索引來生成斐波那契數列。在上一個例子裡,每一次迴圈我們都會重置 a、b 和 c 的值。但在這個版本里,我們將不會重置任何一個值,取而代之的是,我會把 f[i-2] + f[i-1] 的值賦值給 f[i],然後把 f[i] 的值存入到陣列中。

for(i=2; i<=50; i++) {
  fib[i] = fib[i-2] + fib[i-1];
  fib.push(fib[i]);
}
複製程式碼

至此,我擁有一個完整的斐波那契數列,卻不是僅有偶數的序列,所以我將用第二個迴圈來獲取少於 4,000,000 並且裡面都是偶數的陣列。

arrUnder4mil = [];
for (var i = 0; i < fib.length; i++) {
  if (fib[i] <= 4000000 && fib[i] %2 == 0) {
    arrUnder4mil.push(fib[i]);
  }
}
複製程式碼

最後,我將對陣列裡面數字進行求和,並列印這個結果。

let fibSum = arrUnder4mil.reduce((a, b) => a + b, 0);

console.log(fibSum);
複製程式碼

總結:

儘管我們的 JavaScript 程式碼有點多,但這兩種方法都能在幾毫秒內解決這個問題。我認為,對於這些技術面試,通過兩種不同的方式或語言能過幫助僱主發現你的全面性和創造性。但最重要的是,它展示了你的邏輯思維能力。如果有任何反饋,請聯絡我。謝謝!


掘金翻譯計劃 是一個翻譯優質網際網路技術文章的社群,文章來源為 掘金 上的英文分享文章。內容覆蓋 AndroidiOS前端後端區塊鏈產品設計人工智慧等領域,想要檢視更多優質譯文請持續關注 掘金翻譯計劃官方微博知乎專欄

相關文章