Даже в стоимостном выражении сумма в Фибоначчи, лимит составляет 4 миллиона - PullRequest
0 голосов
/ 15 января 2020
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())

Что не так с этим кодом? Он ничего не возвращает, но, по-моему, выглядит хорошо.

Ответы [ 2 ]

0 голосов
/ 15 января 2020

вы должны вернуть sum(L) из функции, а не из для l oop, следуйте нижеприведенному коду

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())

, и другие вещи смотрят на диапазон слишком много, из-за этого это займет некоторое время или может вызвать любую ошибку, связанную с памятью, поэтому уменьшите ее для тестирования.

0 голосов
/ 15 января 2020

В операторе 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.

...