使用生成器可以节省内存(如果不使用Python
2,请使用
xrange代替
range)。这就是我想出的。它非常类似于您,
nToSum而无需
compress。
def sums(length, total_sum): if length == 1: yield (total_sum,) else: for value in range(total_sum + 1): for permutation in sums(length - 1, total_sum - value): yield (value,) + permutationL = list(sums(5,100))print('total permutations:',len(L))# First and last 10 of listfor i in L[:10] + L[-10:]: print(i)输出量
total permutations: 4598126(0, 0, 0, 0, 100)(0, 0, 0, 1, 99)(0, 0, 0, 2, 98)(0, 0, 0, 3, 97)(0, 0, 0, 4, 96)(0, 0, 0, 5, 95)(0, 0, 0, 6, 94)(0, 0, 0, 7, 93)(0, 0, 0, 8, 92)(0, 0, 0, 9, 91)(98, 0, 2, 0, 0)(98, 1, 0, 0, 1)(98, 1, 0, 1, 0)(98, 1, 1, 0, 0)(98, 2, 0, 0, 0)(99, 0, 0, 0, 1)(99, 0, 0, 1, 0)(99, 0, 1, 0, 0)(99, 1, 0, 0, 0)(100, 0, 0, 0, 0)



