Предмет: Информатика, автор: bombardirovshik07

Решите задачу пж, а то у меня чёт не прёт (на питоне):

Количество разбиений на слагаемые
Дано натуральное число 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
.
Выходные данные
Выведите количество различных разбиений на слагаемые.

Ответы

Автор ответа: kostyamailkotya
0

Ответ:

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')

Объяснение:

расписал все в комментариях

Похожие вопросы
Предмет: Математика, автор: hitman19812013