繁体   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