Как напечатать все числа Фибоначчи до n-го числа Фибоначчи? - PullRequest
0 голосов
/ 13 февраля 2020

Я хочу напечатать все числа Фибоначчи на тот, который имеет индекс n, но мой код печатает только n-е число Фибоначчи. подскажите пожалуйста что это я делаю не так и как это надо делать?

n = int(input('Enter a number: '))
def fibonacci(n): 
    if n < 0: 
        print("Error(enter a positive integer)") 
    elif n == 1: 
        return 0
    elif n == 2: 
        return 1
    else: 
        for i in range(n):
            return fibonacci(n-1) + fibonacci(n-2)

print(fibonacci(n)) 

Ответы [ 2 ]

1 голос
/ 13 февраля 2020
        for i in range(n):
            return fibonacci(n-1) + fibonacci(n-2)

Это для l oop не имеет смысла, так как вы return на первой итерации. Вы должны просто полностью избавиться от l oop.

Это также не та часть, которую вы хотите повторить. Вместо этого вы хотите повторить оператор print():

for i in range(n):
    print(fibonacci(i)) # You want the i-th fibonacci number

Это даст вам желаемый результат, но это очень неэффективный способ сделать это. Для больших значений n вы будете вычислять i-е число Фибоначчи экспоненциальное число раз.

0 голосов
/ 13 февраля 2020

Если вы умны, и ваш n больше 1, вы можете использовать reduce более изощренным способом:

from functools import reduce
def fibonacci(n):
    return reduce(lambda x,y: x+[x[-1]+x[-2]], [[0,1]]+[[0]]*(n-2))

Вот как это работает для n=5:

[[0,1], [0], [0], [0]] -> 
[[0,1,1], [0], [0]] -> 
[[0,1,1,2], [0]] -> 
[[0,1,1,2,3]] -> 
stops here and returns [0,1,1,2,3]
...