簡體   English   中英

在Fibonacci系列中找到偶數的總和

[英]finding the sum of even numbers in the Fibonacci series

我遇到了這個問題的解決方案,並且不理解其中的幾行。 什么是n<=1 and 1部分中的定義是指fib(n)和,所述更大的,為什么是它不是if not fib(i)%2 這怎么不意味着“如果給定的斐波納契數不均勻,那么我們將它加到我們的總數中”?

cache = {}

def fib(n):
    cache[n] = cache.get(n, 0) or (n<=1 and 1 
               or fib(n-1)+fib(n-2))
    return cache[n]

i = 0
n = 0 
# we have to pretend the series doesn't go beyond 4 mil
while fib(i) <= (4000000):
    if not fib(i) % 2: 
        n = n + fib(i)
    i = i + 1
print n 

讓我們稍微分解一下:

(n <= 1) and 1 or (fib(n - 1) + fib(n - 2))

這是python程序員用來模擬通常在C中而不是在Python中可用的條件三元運算符的方式。 所以基本上條件表明,如果n小於等於1,則返回1,或者做fib(n - 1) + fib(n - 2)

第二個問題:

這與python(和其他一些語言)如何將數字轉換為布爾條件有關。 對於整數, 0計算結果為False,其他每個整數的計算結果為True。 在這種情況下,取偶數的模2導致0,奇數導致1,這意味着它確實檢查數是否是奇數,並且它想要一個非奇數,即偶數。

Fibonacci系列以1開頭。在該部分代碼檢查給定值是否小於或等於1。

1 1 2 3 5 8 13 ...

正如您所看到的,Fibonacci函數是一個部分函數: 來自WikiPedia的圖片

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM