Python 中递归的全局变量



我在回溯方面遇到了一些困难。

  1. 如何定义要在回溯问题中使用的全局列表?我看到了几个答案,他们都建议在函数内的变量名称前面使用"global"关键字以用作全局。但是,它在这里给了我一个错误。

  2. 是否有任何好的通用方法可用于获取结果,而不是全局变量?

下面的代码试图解决回溯问题,其中给出了一个数字列表,我们必须找到添加到目标的唯一数字对(不允许排列(。

For example, given candidate set [2, 3, 6, 7] and target 7, 
A solution set is: 
[
  [7],
  [2, 2, 3]
] 

       ///////////////////////////////CODE/////////////////////////////

       seen = []
        res = []
        def func(candidates, k, anc_choice):     #k == target
            #global res -- gives me an error --  global name 'res' is not defined
            if sum(anc_choice) == k:
                temp = set(anc_choice)
                flag = 0
                for s in seen:
                    if s == temp:
                        flag = 1
                if flag == 0:
                    seen.append(temp)
                    print(anc_choice)  #this gives me the correct answer
                    res.append(anc_choice)  #this doesn't give me the correct answer?
                    print(res)
            else:
                for c in candidates:
                    if c <= k:
                        anc_choice.append(c) #choose and append
                        if sum(anc_choice) <= k:
                            func(candidates, k, anc_choice) #explore
                        anc_choice.pop() #unchoose
        func(candidates, k, [])

有人可以给我答案/建议吗?

要使用 global

关键字,您首先需要在实例化它之前将其声明为 global。

global res
res = []

虽然从查看您的代码。由于res = []在函数之外,因此它已在全球范围内可用。

有很多

原因说明为什么不应该使用全局变量。

如果你想要一个更新上述范围内的列表的函数,只需将列表作为参数传递即可。列表是可变的,因此在函数调用后会更新列表。

下面是一个简化的示例。

res = []
def func(candidate, res):
    res.append(candidate)
func(1, res)
res # [1]

相关内容

  • 没有找到相关文章

最新更新