在Fibonacci系列中找到偶数的总和

时间:2014-03-07 03:27:31

标签: python numbers fibonacci

我遇到了这个问题的解决方案,并且不理解其中的几行。 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 

2 个答案:

答案 0 :(得分:1)

让我们稍微分解一下:

(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,这意味着它确实检查数是否是奇数,并且它想要一个非奇数,即偶数。

答案 1 :(得分:1)

Fibonacci系列以1开头。在该部分代码检查给定值是否小于或等于1。

1 1 2 3 5 8 13 ...

正如您所看到的,Fibonacci函数是一个部分函数: Image from WikiPedia