使用递归获取列表中的匹配总和数

时间:2016-11-23 01:24:27

标签: python python-3.x recursion

def number_ties(my_list, for_it=[], against=[],ties=0,k=0):
    if len(my_list)==0:
        return ties
    j=my_list[0]
    del my_list[0]
    if sum(list(for_it))==sum(list(against)) and k>0:
        ties+=1
    k+=1
    return number_ties(my_list,for_it+[j],against,ties,k)+number_ties(my_list,for_it,against+[j],ties,k)

使用递归,我试图获取一个数字列表,并找出有多少种方法可以将这些数字的不同组合用于支持和反对(例如投票)并实现平局。例如,[1,2,3]可以有两种方式,即[1,2]对[3]和[3]对[1,2]。类似地[1,1,2,3,5]应该有4种方式。 (列表中的相同数字应被视为不同的投票。例如,具有不同投票权重的人。) 我上面的代码不起作用。我该如何解决?

2 个答案:

答案 0 :(得分:1)

将组合总和到列表总和的一半的结果问题更适合递归实现:

Subject

答案 1 :(得分:0)

首先,将其重新演绎为一个稍微简单的问题:您必须找到总和为数组总和的一半的元素组合。这称为subset sum problem

基本理念是"简单"。

Given: array, target
Grab the first array element, array[0]
if target == 0
    success; you're done
else if target < 0
    failure
else  # recur both with and without the first element
    solution_with = recur using (array[1:end], target - array[0]);
                    append array[0]
    solution_not  = recur using (array[1:end], target)

这会让你感动吗?         复发