Я должен написать функцию Python, которая принимает аргумент n и возвращает n-ю итерацию последовательности Лукаса. Я использовал рекурсию для выполнения sh этого, и моя проблема связана с эффективностью кода. Тестовый пример, который должна пройти функция: lucas(100)
, с ожидаемым значением 792070839848372253127. Я не знаю более эффективного способа решить эту проблему, чтобы программа не продолжала работать вечно, когда доходит до этого случая.
Это мой код:
def lucas(n):
"""Returns the nth Lucas number.
Lucas numbers form a series similar to Fibonacci:
2, 1, 3, 4, 7, 11, 18, 29, 47, 76, 123, 199, 322, 521, 843,...
>>> lucas(0)
2
>>> lucas(1)
1
>>> lucas(2)
3
>>> lucas(3)
4
>>> lucas(11)
199
>>> lucas(100)
792070839848372253127
"""
"*** YOUR CODE HERE ***"
if n == 0:
return 2
elif n == 1:
return 1
else:
return lucas(n-1) + lucas(n-2)
Если кто-то может оказать какую-либо помощь, я был бы очень признателен!
Редактировать: Спасибо всем, кто предоставил помощь и другие решения !!! Я новичок в использовании StackOverflow, поэтому я действительно ценю это! В итоге я использовал следующий код, чтобы найти гораздо более быстрое и эффективное решение:
list = [2,1]
for i in range(2,n+1):
list.append(list[i-2] + list[i-1])
return list[n]