[英]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.