Решите задачу пж, а то у меня чёт не прёт (на питоне):
Количество разбиений на слагаемые
Дано натуральное число N
. Найдите количество его разбиений на натуральные слагаемые. Два разбиения, отличающиеся только порядком слагаемых, будем считать за одно.
Например, для N=5 существует 7 различных разбиений:
5=5
5=4+1
5=3+2
5=3+1+1
5=2+2+1
5=2+1+1+1
5=1+1+1+1+1
Входные данные
Задано единственное число N⩽30
.
Выходные данные
Выведите количество различных разбиений на слагаемые.
Answers & Comments
Ответ:
def foo(n, k = None): #функция для разложения на слагаемые
if k is None:
k = n
if n == 0: #возврат пустого массива при нулевом н
return []
result = []
if n <= k:
result.append([n])
for i in range(1, 1+min(n, k)):
for l in foo(n-i, i):
result.append(l + [i])
return result
for r in range(1,31): #условие твоей задачи
print(*foo(r), sep='\n')
Объяснение:
расписал все в комментариях