我编辑了我的问题,因为我认为我没有很好地解释它。作为重复链接的subset_sum函数似乎是数字列表是随机的,但也适用于我的情况。但是,对于像我的函数这样的大数字似乎效率低下。我的问题是根据N的值始终知道的数字列表。
如果N为10,则数字列表将为1到9或范围(1,N)。该函数应返回从1到9的所有唯一数字组合,总和为10.在这种情况下,我的函数将解决此问题并返回9但是对于大数字,它需要很长时间。在我看来,当已知数字范围而不是必须遍历每个可能的组合时,应该有更好的方法来解决这个问题。也许我错了。
import itertools
def counter(n):
count = 0
l = range(1, n)
for i in range(1, n):
for c in itertools.combinations(l, i):
if sum(c) == n:
count += 1
return count
答案 0 :(得分:0)
您搜索的是分区功能p。 查看https://en.m.wikipedia.org/wiki/Partition_(number_theory) 它包含递归公式,该公式在输入方面仅是线性的。