Две проблемы
Есть две проблемы с вашим кодом:
- Существует бесконечное l oop, которое генерирует исключение
RecursionError
- Невозможно получить все члены последовательности (вы сказали, что хотите напечатать всю последовательность, а не только последний член)
Бесконечный l oop
Попробуйте код ниже. Я просто добавил n==1
в качестве другого условия остановки.
def fib(n):
n = int(n)
if n == 0 or n == 1: # Changed here
return 1
return fib(n - 1) + fib(n - 2)
num = input("Give me a number: ")
print(fib(num))
Случай f(1)=1
требуется по определению (см. здесь ).
Или просто отлаживая свой код, вы поймет, что l oop никогда не закончится для fib(1)
, потому что возвращает:
f(1-1) + f(1-2)
>>> f(0) + f(-1)
>>> 1 + infinite loop
.
Печать всех терминов
Вы можете попытаться использовать списки в своем рекурсивном коде, что сложно сделать или, возможно, изменить на версию с циклами.
С циклами:
# A version using a while loop
# This code returns the list of terms
def fib(n):
n=int(n)
terms = []
i=0
while i<=n:
if i==0 or i==1:
terms.append(1)
else:
terms.append(terms[-2]+terms[-1])
i+=1
return terms
Рекурсивно:
Working on it
Попробуйте все эти примеры здесь .