偶数项总和以斐波纳契为单位,上限为400万

问题描述 投票:0回答:1
def fib(n):
   if n<= 1: 
       return n 
   else: 
       return(fib(n-1)+fib(n-2))

def comp():
   L=[]
   for i in range(1,4000000): 
        if i % 2 ==0:
           L.append(fib(i))
           return sum(L)
print(comp())

此代码有什么问题?它不返回任何东西,但根据我看来,它看起来不错。

python fibonacci
1个回答
0
投票

return语句设置为错误的增量。在i % 2 == 0第一次为真时执行(在您的情况下为i == 2)。

def fib(n):
   if n<= 1: 
       return n 
   else: 
       return(fib(n-1)+fib(n-2))

def comp():
   L=[]
   for i in range(1,4000000): 
        if i % 2 ==0:
           L.append(fib(i))
   return sum(L)

print(comp())

不过上述代码无法正常工作。您知道这个数字会增加多少吗?

尝试

for i in range(1,40): 

首先。我的机器花了好几秒钟。结果是63245985。


0
投票

您应该从函数而不是从for循环返回sum(L),请遵循以下代码

def fib(n):
    if n<= 1: 
        return n 
    else: 
        return(fib(n-1)+fib(n-2))

def comp():
    L=[]
    for i in range(1,20): 
        if i % 2 ==0:
            L.append(fib(i))
    return sum(L)

print(comp())

和其他东西过多地看待它的范围,因为这会花费一些时间或可能会产生任何与内存相关的错误,因此请减少进行测试。

© www.soinside.com 2019 - 2024. All rights reserved.