我遇到了这个问题的解决方案,并且不理解其中的几行。 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
答案 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函数是一个部分函数: