Я ищу, чтобы перечислить все разделы n в k частях.Получите n в точных k частях. Алгоритм рекурсии и разбиения. p (n, k)
Итак, для p (5,3) я получил бы 2 раздела k = 3 => (3,1,1), (2,2,1).
Вот что я нашел от поиска и просматривал StackOverflow:
def p(n,k):
lst = []
if n < k:
return lst
elif k == 1:
return lst
elif k == n:
return lst
else:
p(n-1, k-1)
p(n-k, k)
return lst
^^^^ Это форма я хочу,
Как это, найти сумму к частям легко, вы возвращаете p (n-1, k-1) + p (nk, k). Что касается меня, мне нужно перечислить каждый элемент таким образом [(3,1,1), (2,2,1)].
Моя основная проблема - «построить» эти разделы рекурсивно. Как бы вы справились с этим?
Редактировать
Если вы получаете базовый случай к = 1, добавить + 1, к-1 раз. (4,1) затем (4,1,1)
Если вы получаете базовый блок k = n, разделите его и удалите по одному на каждую часть.
Как так: (3,3), а затем (3,3,3), а затем (2,2,2)
Если вы получите базовый случай к < п, ничего
В принципе, моя проблема состоит в том, чтобы «складывать» те из базового случая в верхнюю часть и получить полный список p (6,3) = [(2,2,2), (4,1,1), (3,2,1)]
Не могли бы вы объяснить немного больше того, что вы имеете в виду раздел? Кроме того, возможно, есть еще несколько пояснительных имен переменных? –
@ КонстантинНарышкин математик типа амирит? : rolleyes: –
Как это все вернет? lst никогда не добавляется, поэтому вы всегда возвращаете пустой список. В любом случае вам, вероятно, потребуется добавить список в качестве параметра в рекурсивную функцию. – Ryan