附加到递归函数的列表

时间:2016-06-18 10:01:54

标签: python recursion combinations

我写了下面的递归程序,它找到了可以添加的数字组合来制作目标值:

arr = [1, 2, 2, 3, 5]
target = 8

def comb_sum(arr, current_index, target, result, ans):
    if target == 0:
        print result
        ans.append(result)
        return 0
    if target < 0:
        return 1
    if current_index == len(arr):
        return 1

    result.append(arr[current_index])
    comb_sum(arr, current_index+1, target - arr[current_index], result, ans)
    result.pop()

    comb_sum(arr, current_index+1, target, result, ans)
    return ans



print comb_sum(arr, 0, target, [], [])

由于我使用arr.append()追加result,我期望输出正确。

即使程序正确,我也无法向result添加列表ans

出了什么问题?

我期待这个输出: [[1, 2, 2, 3], [1, 2, 5], [1, 2, 5], [3, 5]] 但相反,我得到这个输出: [[], [], [], []]

2 个答案:

答案 0 :(得分:2)

import copy
arr = [1, 2, 2, 3, 5]
target = 8
def comb_sum(arr, current_index, target, result, ans):

if target == 0:
    print result
    ans.append(copy.deepcopy(result) )
    return 0
if target < 0:
    return 1
if current_index == len(arr):
    return 1

result.append(arr[current_index])
comb_sum(arr, current_index+1, target - arr[current_index], result, ans)
result.pop()

comb_sum(arr, current_index+1, target, result, ans)
return ans

print comb_sum(arr, 0, target, [], [])

答案 1 :(得分:0)

复制结果列表并传递如下

comb_sum(arr, current_index+1, target - arr[current_index], result[:], ans)

只有一份结果流经该程序。因此,只要result发生变化,它就会反映在ans中。这就是为什么复制它会破坏链条并为您提供正确的结果