[英]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.