在python [duplicate]中递归更改布尔值

问题描述 投票:-1回答:1

这个问题在这里已有答案:

在某些情况下,这是我正在研究的面试问题(取自https://leetcode.com/problems/path-sum/description/)。我现在意识到它只是从每个递归函数返回一个布尔值更清洁,但我仍然不明白为什么这不起作用:

class Solution:
    def hasPathSum(self, root, sum):
        result = None
        self.recurse(result, root, root.val, sum)
        return result
    def recurse(self, result, node, sub_sum, target):
        if sub_sum > target:
            return
        if sub_sum == target:
            result = True
            return
        if node.left:
            self.recurse(result, node.left, sub_sum+node.left.val, target)
        if node.right:
            self.recurse(result, node.right, sub_sum+node.right.val, target)

返回的值(无论树深度如何)为None。为什么这个值没有改变?是不是通过参考传递?

python recursion recursive-backtracking
1个回答
0
投票

你不能从它定义的方法之外影响result - 它只是一个局部变量,作用于你定义它的函数。正如其他人所说,这里没有传递引用。

为了达到你想要的效果,你必须让result成为对象的属性 - 实际上将它称为self.result。 (你可能也想在你的类的构造函数中初始化它 - 但是我不确定这里显示的两个方法应该在整个类的上下文中做什么,所以我不能确定。)

© www.soinside.com 2019 - 2024. All rights reserved.