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

类形式的简单DFS代码运行异常,函数形式正常,求原因

类形式DFS路径计数错误原因及修复

问题情况

函数形式的DFS代码调用dfs(2,1)能得到正确结果3,但改成类形式后,调用Solution().uniquePaths(3,2)返回0,不符合预期。

函数形式代码

k = 0

def dfs(m, n):
  global k
  if (m == 0) or (n == 0):
    k += 1
    return
  
  else:
    dfs(m - 1, n)
    dfs(m, n - 1)

dfs(2,1)
# Result : 3

类形式代码(存在问题)

class Solution(object):
    def uniquePaths(self, m, n):
        """
        :type m: int
        :type n: int
        :rtype: int
        """
        self.path = 0

        self.dfs(m - 1, n - 1)
        return self.path

    def dfs(self, m, n):

      if (m == 0) or (n == 0):
        self.path += 1
        return
      
      else:
        dfs(m - 1, n)
        dfs(m, n - 1)

ans = Solution().uniquePaths(3, 2)
print(ans)
# Result : 0

错误原因

类中dfs方法的递归调用存在问题:在else分支里直接写dfs(m-1, n),这会优先调用全局的dfs函数(如果之前运行过函数式代码),而不是当前类实例的self.dfs方法。全局dfs修改的是全局变量k,完全不会影响类实例的self.path,导致最终self.path始终是初始值0。如果没有全局dfs,这里会直接抛出NameError,提示找不到dfs名称。

修复后的代码

把递归调用改为调用当前实例的self.dfs方法即可:

class Solution(object):
    def uniquePaths(self, m, n):
        """
        :type m: int
        :type n: int
        :rtype: int
        """
        self.path = 0

        self.dfs(m - 1, n - 1)
        return self.path

    def dfs(self, m, n):
      if (m == 0) or (n == 0):
        self.path += 1
        return
      
      else:
        # 改为调用当前实例的dfs方法
        self.dfs(m - 1, n)
        self.dfs(m, n - 1)

ans = Solution().uniquePaths(3, 2)
print(ans)
# Result : 3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 02:36:19