递归实现动态规划并不难,但是对于数据规模大的问题,也许会爆栈也说不定。对于递归实现动态规划,通常一般也可以使用非递归。但是需要一定分析
鲁迅说过: 大问题拆成小问题,小问题拆成更小的问题,小小问题拆成更小小问题,直到拆解为原子性问题(自定义的原子性问题即为不可拆分问题
),然后解决。
鲁迅说的有道理,我也觉得,但问题是,得先从小规模问题来处理解决,然后再处理次大问题,发现这很符合递归在实现动态规划的逻辑看伪代码:
def dfs(int l,int r):
mid=(l+r)/2
dfs(l,mid) //被拆成了更小子问题
dfs(mid+1,r)
//处理逻辑省略...
也就是说在用for遍历,而并不是函数递归时,可以控制好l和r,让小范围的问题先处理,再处理大一点规模问题。
比如并不是所有的问题都可以这样设计,根据题目而定
for(int i=n-1;i>=0;i--){
for(int j=i+1;j<n;j++){
//处理i,j区间的问题
}
}
这样在处理i,j区间问题时,该区间里的所有子问题都被处理了。
鲁迅:我没说锅!