[英]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函數是一個部分函數:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.