【发布时间】:2023-02-04 21:20:53
【问题描述】:
我一直在尝试解决一个递归问题islandPerimeter
/**
* @param {number[][]} grid
* @return {number}
*/
var islandPerimeter = function (grid) {
let visitedLand = new Set();
function dfs(i, j) {
if (i < 0 || j < 0 || i > grid.length || j > grid[0].length || grid[i][j] == 0) return 0;
if (visitedLand.has({ i: j })) return 1;
visitedLand.add({ i: j });
let perimeter = dfs(i, j + 1);
perimeter += dfs(i + 1, j);
perimeter += dfs(i, j - 1);
perimeter += dfs(i - 1, j);
return perimeter;
}
for (let i = 0; i < grid.length; i++) {
for (let j = 0; j < grid[0].length; j++) {
if (grid[i][j]) {
return dfs(i, j);
}
}
}
};
let nums = [
[0, 1, 0, 0],
[1, 1, 1, 0],
[0, 1, 0, 0],
[1, 1, 0, 0],
];
islandPerimeter(nums);
我已经在我的主要功能中初始化了dfs()的这个功能,但它显示了这个......
function dfs(i, j) {
^
RangeError: Maximum call stack size exceeded
有两个 for() 循环首先调用这个 dfs 函数,在其中我再次调用它们。
请解释这是什么问题,我已经阅读了一些关于过度调用递归的主题。有任何解决这个问题的方法吗?
【问题讨论】:
标签: javascript multidimensional-array data-structures