我在这里绝对是个初学者。我在Python中试了一下Project Euler上的问题。你能指出我的代码哪里出错了吗?
Q)Fibonacci序列中的每一个新项都是通过将前两个项相加而生成的。从1和2开始,前10个术语将是:
1,2,3,5,8,13,21,34,55,89。。。
通过考虑Fibonacci序列中值不超过400万的项,求出偶数项的和。
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)
最佳答案
你的代码没有错,只是太慢了。为了解决Project Euler问题,不仅代码必须正确,而且算法必须高效。
你的斐波那契计算是非常昂贵的-也就是说,递归地尝试获得下一个斐波那契数在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
关于python - “Python”中的项目Euler#2,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23258545/