我正在尝试以递归的方式检索元素,这些元素求和为特定值(在这种情况下为9)。
在下图中的简化示例中,我有3个分支(值分别为3、4和5),并且最大可能总和为9,我希望得到以下输出:
[3,3,3] (= 9)
[3,4] (= 7)
[3,5] (8)
[4,3] (7)
[4,4] (8)
[4,5] (9)
[5,3] (8)
i = [3, 3, 3]
i = [3, 3, 3]
i = [3, 3, 3]
i = [3, 3]
i = [3, 3]
i = [3, 3]
i = [3]
i = [3, 4]
i = [3, 4]
i = [3, 4]
i = [3]
i = [3, 5]
i = [3, 5]
i = [3, 5]
i = [3]
我知道我可以使用itertools获得类似的输出,但是我的实际代码比这更复杂,因此我无法在其中使用iterool。 这是我当前的代码:
import copy
maximum_sum = 9
branches = [3,5]
ar = []
big_ar = []
def recurse(summary, index):
if summary + branches[index] <= maximum_sum:
summary += branches[index]
ar.append(branches[index])
for i in range(len(branches)):
recurse(summary, i)
my_ar = copy.deepcopy(ar)
big_ar.append(my_ar)
del ar[-1]
return (big_ar)
all_clusters = recurse(0, 0)
for i in all_clusters:
print ('i = ', i)
答案 0 :(得分:0)
maxsum = 9
branches = [3, 4, 5]
def recurse(maxsum):
if maxsum < min_branch:
yield []
for b in branches:
if maxsum >= b:
for v in recurse(maxsum - b):
yield [*v, b]
else:
return
for i in recurse(9):
print ('i = ', i)
答案 1 :(得分:0)
解决方案-这就是我想要实现的目标。快速又肮脏,但是可以正常工作:
import copy
maximum_sum = 9
branches = [3,4,5]
ar = []
sum_ar = []
def recurse(summary, index):
if summary + branches[index] <= maximum_sum:
summary += branches[index]
ar.append(branches[index])
for i in range(len(branches)):
recurse(summary, i)
if summary + branches[index] > maximum_sum:
my_ar = copy.deepcopy(ar)
sum_ar.append(my_ar)
del ar[-1]
return (sum_ar)
for i in range(len(branches)):
all_clusters = recurse(0, i)
for i in all_clusters:
print ('i = ', i)