В документации для @functools.lru_cache
приведен пример вычисления чисел Фибоначчи с использованием кеш для реализации метода динамического программирования:
@lru_cache(maxsize=None)
def fib(n):
if n < 2:
return n
return fib(n-1) + fib(n-2)
Я видел, как этот подход используется для решения различных задач программирования. Имеет ли он ту же временную / пространственную сложность, что и «стандартный» итеративный подход динамического программирования, например:
def fib(n):
if n < 2:
return n
dp = [0]*(n+1)
dp[1] = 1
for i in range(2 , n+1):
dp[i] = dp[i-1] + dp[i-2]
return dp[n]
Кроме того, есть ли недостатки в использовании рекурсивного подхода?