我在这里绝对是个初学者。我在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/

10-12 22:02