岛屿数量问题代码触发递归深度超限,请求定位错误原因
错误定位与修复
你的代码触发递归深度超限的核心原因是一行语法错误:在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
相关产品推荐
相关产品推荐

