You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

岛屿数量问题代码触发递归深度超限,请求定位错误原因

错误定位与修复

你的代码触发递归深度超限的核心原因是一行语法错误:在flood函数中,你误用了比较运算符==而非赋值运算符=来标记已访问的陆地。

具体问题点

看你flood函数里的这行代码:

grid[row][col]=='0'

这行代码仅做了值相等判断,没有修改网格的实际值。也就是说,处理过的陆地单元格仍然是'1',后续递归会反复访问同一个单元格(比如单元格A调用单元格B,单元格B又回调单元格A),形成无限递归循环,最终触发递归深度超限错误。

而参考解法中对应的代码是正确的赋值操作:

grid[i][j] = '0'

这行代码会把已访问的陆地标记为水域,彻底避免重复访问,终止无效递归。

修正后的代码

把错误的比较语句改成赋值即可:

class Solution:
    def numIslands(self, grid: List[List[str]]) -> int:

        def flood(row, col):
            if row < 0 or col < 0 or row >= len(grid) or col >= len(grid[0]) or grid[row][col] == '0':
                return

            # 修正为赋值操作,标记已访问陆地
            grid[row][col] = '0'

            flood(row+1, col)
            flood(row-1, col)
            flood(row, col+1)
            flood(row, col-1)

        count = 0
        for row in range(len(grid)):
            for col in range(len(grid[0])):
                if grid[row][col] == '1':
                    count += 1
                    flood(row, col)

        return count

额外说明

你提到的递归函数是否传入grid的差异确实不影响结果——你的flood函数通过闭包访问外部的grid变量,和参考解法直接传入grid的效果完全一致。真正的问题仅在于那行语法错误的比较语句。

内容的提问来源于stack exchange,提问作者ndnchapathi69

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 20:25:16