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种方式。 (列表中的相同数字应被视为不同的投票。例如,具有不同投票权重的人。) 我上面的代码不起作用。我该如何解决?
答案 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)
这会让你感动吗? 复发