Python递归中如何统计次数并将count变量返回至函数外部?
问题分析与修正
问题现象
递归统计带障碍物网格的可行路径数时,内部print显示count能正确自增到1,但最终返回结果始终是0,预期输出为2(输入网格[[0,0,0],[0,1,0],[0,0,0]])。
错误原因
- 整数的不可变性:Python中整数是不可变类型,传递
count给递归函数时是传值而非传引用,递归内部修改的只是局部变量,不会影响外部的count变量。 - 递归逻辑缺陷:
- 递归函数没有返回值,无法将路径数向上传递。
- 修改原网格标记走过的路径属于多余操作,还可能破坏原数据,导致后续递归判断出错。
修正后的代码
from typing import List class Solution: def uniquePathsWithObstacles(self, obstacleGrid: List[List[int]]) -> int: m = len(obstacleGrid) n = len(obstacleGrid[0]) # 递归函数:返回从(row, col)到终点的路径数 def dfs(row, col): # 越界或当前是障碍物,路径数为0 if row >= m or col >= n or obstacleGrid[row][col] == 1: return 0 # 到达终点,找到一条有效路径 if row == m - 1 and col == n - 1: return 1 # 累加向右、向下走的所有有效路径数 return dfs(row, col + 1) + dfs(row + 1, col) # 起点是障碍物直接返回0 if obstacleGrid[0][0] == 1: return 0 return dfs(0, 0)
代码说明
- 递归函数
dfs直接返回当前位置到终点的路径数,彻底避免外部变量传递的问题。 - 先判断当前位置是否越界或为障碍物,直接返回0终止无效递归分支。
- 到达终点时返回1,代表找到一条有效路径。
- 最终结果为向右递归的路径数加上向下递归的路径数,自然累加所有有效路径。
- 增加起点为障碍物的边界判断,提前终止无效计算。
内容的提问来源于stack exchange,提问作者jxswxnth
相关产品推荐
相关产品推荐

