繁体   English   中英

我对递归在 js 中的工作方式感到困惑。 下面的例子

[英]I got confused with how recursion works in js. Example below

这是一个任务:

给定填充了非负数的 amxn 网格,找到一条从左上角到右下角的路径,该路径最小化沿其路径的所有数字的总和。

注意:您只能在任何时间点向下或向右移动。

例子:

输入:

[
  [1,3,1],
  [1,5,1],
  [4,2,1]
]

输出: 7

解释:因为路径 1→3→1→1→1 使和最小化。

这是我的解决方案,我对堆栈的工作方式感到困惑。 我的主要问题是找到minSum后如何返回它? 据我所知,我的 console.log 显示我找到了正确的minSum 但是如何将结果返回给 main 函数?

minSum = minSum > curSum ? curSum : minSum;

当我改变minSum在这条线不会修改minSum在我所有的其他栈? 它是局部变量还是被引用,无论我在哪里更改它都会被更改? 还是我应该为退货而烦恼?

var minPathSum = function(grid) {
    let i = 0;
    let j = 0;
    let minSum = 0;
    let curSum = 0;
    
    minSum = 1000000000000; // just to make some minSum to have something to compare with
    findPathSum(grid, j, i, minSum, curSum);
    console.log(minSum, "Main minSum")
    return minSum;
};

function findPathSum(grid, x, y, minSum, curSum){
    if(y + 1 >= grid.length && x + 1 >= grid[0].length)
    { 
        minSum = minSum > curSum ? curSum : minSum;
        console.log(minSum);
        return minSum;
    }
    console.log(grid[y][x], "This is a sum");
    console.log(x, "this is X")
    console.log(y, "This is Y")
    curSum += grid[y][x];
    if (x + 1 < grid[0].length)
        findPathSum(grid, ++x, y, minSum, curSum);
    if(y < grid.length)
        findPathSum(grid, x, ++y, minSum, curSum);
    return minSum;
}

只需将 minsum 变量分配给您的递归函数,因为它以任何一种方式返回一个值。

var minPathSum = function(grid) {
    let i = 0;
    let j = 0;
    let minSum = 1000000000000;
    let curSum = 0;
 
    minsum = findPathSum(grid, j, i, minSum, curSum);
    console.log(minSum, "Main minSum")
    return minSum;
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM