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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 18:24:42