基本思想
本质上就是暴力递归,将大问题分解成小问题,这里的小问题之间有一定联系
以斐波那契数列为例
递归的算法
def fib(n):
if n == 0:
return 0
if n == 1:
return 1
return fib(n-1) + fib(n-2)
从递归树可以看出,很多子问题的求解是重复的,子问题解决一遍之后我们将其记录下来就可以解决另一个与之相关的子问题,从而解决最终的大问题
动态规划
dp = [0]*(105)
dp[1] = 1
def fib(n):
if n == 0:
return 0
if not dp[n]:
dp[n] = fib(n-1) + fib(n-2)
return dp[n]