weixin_42387072
2019-03-28 16:29 阅读 354

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

20

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条回答 默认 最新

  • caozhy 从今以后生命中的每一秒都属于我爱的人 2019-03-28 17:25

    https://ask.csdn.net/questions/715182
    我已经很详细回答过了

    点赞 评论 复制链接分享
  • qq_39310287 qq_39310287 2019-03-28 17:32
    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;
        }
    
    点赞 评论 复制链接分享

相关推荐