Мне нужно преобразовать этот фрагмент кода Python для ускорения. r и n — определяемые пользователем целые переменные.
Предполагается, что функция генерирует все списки со следующими критериями:
listSum = n, length = r, значения (с заменой) находятся в [0,1,2,...,n]
def recurse(r,n):
if r == 1:
yield [n]
return
for i in range(n+1):
for j in recurse(r-1,n-i):
yield [i]+j
Я пытался использовать статические переменные, но они увеличиваются в неправильное время. Я попытался изменить нужные мне переменные (r, n и i) из основной функции и передать их эквивалентной функции моего генератора, но это решение не похоже на то, что оно будет работать с разными начальными значениями для r и n. Я работаю в системе, в которой не установлен Boost, и у меня нет системного разрешения на его установку. Итак, как мне преобразовать рекурсивный генератор списков Python в C++?
Когда я повторяю recurse(r=3, n=4)
, я получаю:
[0, 0, 4]
[0, 1, 3]
[0, 2, 2]
[0, 3, 1]
[0, 4, 0]
[1, 0, 3]
[1, 1, 2]
[1, 2, 1]
[1, 3, 0]
[2, 0, 2]
[2, 1, 1]
[2, 2, 0]
[3, 0, 1]
[3, 1, 0]
[4, 0, 0]
itertools.combinations_with_replacement
? В любом случае, количество комбинаций просто слишком велико, поэтому даже в C++ с достаточно большими входными данными ваш код будет бесконечно зацикливаться. - person Bakuriu   schedule 03.07.2013