java的for循环能不能直接转换成递归 20C

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];
}

2个回答

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;
    }
qq_39310287
qq_39310287 回复传达不到的感情已经不需要了: 如果帮你解决了问题,希望悬赏可以支付下
一年多之前 回复
qq_39310287
qq_39310287 回复传达不到的感情已经不需要了: 代码改过了,这次没问题了
一年多之前 回复
qq_39310287
qq_39310287 回复传达不到的感情已经不需要了: 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; }
一年多之前 回复
weixin_42387072
传达不到的感情已经不需要了 在内层迭代有个超出数组index的error
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问