RT
想把以下代码转换成递归,但是会递归套递归我的逻辑就乱了,想不出来怎么做,谁能帮我改一下
```public static int shortestRoad(int grids[][])
{
int dp[][]=new int [grids.length][grids[0].length];
dp[0][0]=grids[0][0];
for(int i=1;i<grids.length;i++)
{
dp[i][0]=dp[i-1][0]+grids[i][0];
}
for(int j=1;j<grids[0].length;j++)
{
dp[0][j]=dp[0][j-1]+grids[0][j];
}
for(int i=1;i<grids.length;i++)
for(int j=1;j<grids[0].length;j++)
{
dp[i][j]=Math.min(dp[i-1][j], dp[i][j-1])+grids[i][j];
}
return dp[grids.length-1][grids[0].length-1];
}
https://ask.csdn.net/questions/715182
我已经很详细回答过了
public static int shortTestRoad(int grids[][]){
int dp[][] = new int [grids.length][grids[0].length];
outRecursion(0, dp, grids);
return dp[grids.length-1][grids[0].length-1];
}
//内层迭代
public static void inRecursion(int i, int j, int dp[][], int grids[][]){
//若此时计算第一行的值
if (i == 0) {
if (j == 0) {
dp[i][j] = grids[i][j];
j++;
inRecursion(i, j, dp, grids);
}else if (j<grids[0].length) {
dp[i][j] = grids[i][j] + dp[i][j-1];
j++;
inRecursion(i, j, dp, grids);
}
}else{
if (j == 0) {
dp[i][j] = dp[i-1][j] + grids[i][j];
j++;
inRecursion(i, j, dp, grids);
}else if (j < grids[0].length) {
dp[i][j]=Math.min(dp[i-1][j], dp[i][j-1])+grids[i][j];
j++;
inRecursion(i, j, dp, grids);
}
}
return;
}
//外层循环
public static void outRecursion(int i,int dp[][], int grids[][]) {
if (i < grids.length) {
inRecursion(i, 0, dp, grids);
i++;
outRecursion(i, dp, grids);
}
return;
}