分析以下代码
int dp(int i) { int& ans=d[i]; //为该表项声明一个引用,简化对它的读写操作。 if(ans>0) return ans; ans=1; for(int j=0;j<n;j++){ if(G[i][j]){ int tmp=dp(j); ans=ans>tmp+1?ans:tmp+1; } } return ans; }
这是个DAG下的动态规划。是矩形嵌套的dp函数。粘这个代码的原因是为了反复体会这个ans在这个递归函数中的使用技巧。for语句块是为了选出当前行下的dp(j)的最大值,然后ans在此充当了max的作用。
递归函数返回值学习
时间: 2024-10-05 03:15:15