我是这里的绝对初学者。我在 Python 中尝试了有关 Project Euler 的问题。您能指出我的代码哪里出错了吗?
Q) 斐波那契数列中的每一项都是通过添加前两项生成的。从 1 和 2 开始,前 10 个术语将是:
1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
通过考虑斐波那契数列中值不超过四百万的项,找到偶数项的总和。
def fib(a):
if ((a==0) or (a==1)):
return 1
else:
return((fib(a-1))+(fib(a-2)))
r=0
sum=0
while (fib(r))<4000000:
if(((fib(r))%2)==0):
sum+=fib(r)
print(sum)
最佳答案
您的代码没有错误,只是太慢了。为了解决欧拉计划问题,您的代码不仅要正确,而且您的算法必须高效。
您的斐波那契计算非常昂贵 - 也就是说,递归地尝试在 O(2^n) 时间内运行下一个斐波那契数 - 当您想要对限制为 400 万的数字求和时,时间太长了。
Python中更高效的实现如下:
x = 1
y = 1
z = 0
result = 0
while z < 4000000:
z = (x+y)
if z%2 == 0:
result = result + z
#next iteration
x = y
y = z
print result
关于amazon-web-services - "Python"中的欧拉计划#2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23258545/