递归:
1、分成子问题
2、停止条件
3、得到子问题之后的决策过程
4、不记录子问题的解
动态规划:
需要记录子问题的解
递归转为动态规划:(无后效性问题)
1、可变参数推出子空间维数
2、从调用看目标状态
3、从停止条件看初始状态
4、从递归函数分析普遍位置依赖
1、从矩阵的左上角走到右下角,只能往下和往右走,矩阵上的值代表代价,求最低代价。
递归:
matrix=[[1,3,2],[0,3,4],[5,7,1]]
def path(i,j,matrix):
if i==len(matrix)-1 and j==len(matrix[0])-1:
return matrix[i][j]
if i==len(matrix)-1 and j!=len(matrix[0])-1:
return matrix[i][j]+path(i,j+1,matrix)
if i!= len(matrix)-1 and j == len(matrix[0])-1:
return matrix[i][j] + path(i+1,j,matrix)
return matrix[i][j]+min(path(i,j+1,matrix),path(i+1,j,matrix))
print(path(0,0,matrix))
动态规划:
def dp_path(matrix):
row=len(matrix)
col=len(matrix[0])
dp= [[0] * col for i in range(row)]
dp[row-1][col-1]=matrix[row-1][col-1]
for i in range(col-2,-1,-1):

本文探讨了递归与动态规划的概念及其在Python中的实现。递归主要涉及子问题分解、停止条件及决策过程,而动态规划则强调记录子问题的解。通过递归转为动态规划的四步分析法,文章举例说明如何解决矩阵最短路径、累加和匹配、背包问题以及组合计算等经典问题,展示了两者在优化问题求解中的优势。
最低0.47元/天 解锁文章
5528

被折叠的 条评论
为什么被折叠?



