Я хотел сгенерировать все перестановки из списка целых чисел [3,5,7,9]
, в результате чего было задано определенное значение 15
. Я реализовал это, все в порядке.Все перестановки целых чисел соответствуют определенной сумме
def add_next(seq, count, m):
s = sum(seq)
if s == m:
count += 1
print(seq)
elif s < m:
for i in [3,5,7,9]:
add_next(seq + [i], count, m)
else:
return count
add_next([], 0, 15)
Выход:
[3, 3, 3, 3, 3]
[3, 3, 9]
[3, 5, 7]
[3, 7, 5]
[3, 9, 3]
[5, 3, 7]
[5, 5, 5]
[5, 7, 3]
[7, 3, 5]
[7, 5, 3]
[9, 3, 3]
Проблема заключается в том, чтобы переписать эту функцию, чтобы вернуть только количество возможных перестановок в качестве результата функции? Поскольку для огромных списков и больших значений суммы не разумно генерировать все строковые выходы. Я не совсем понимаю, как передавать значения внутри и снаружи рекурсивной функции.
Я пробовал:
def add_next2(seq, count, m):
s = sum(seq)
if s == m:
count += 1
print(seq)
elif s < m:
for i in [3,5,7,9]:
count = add_next2(seq + [i], count, m)
else:
return count
add_next([], 0, 15)
но Retuns ошибку TypeError: unsupported operand type(s) for +=: 'NoneType' and 'int'
. Таким образом, count
- None
. Зачем?
Другой вариант заключается в том, как перезаписать эту функцию, чтобы преобразовать ее в генератор и получить выходные строки один за другим?
Это также очень хороший пример, который исправляет мою ошибку и предлагает создание! Благодарю. – DrDom