我希望在 k 部分中枚举 n 的所有分区。
所以对于 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
^^^^ 这是我想要的形式,
事实上,找到 k 个部分的总和很容易,您返回 p(n-1, k-1) + p(nk,k)。至于我,我需要像这样列出每个元素 [(3,1,1), (2,2,1)]。
我的主要问题是递归地“构建”这些分区。你会如何解决这个问题?
编辑
如果你得到基本情况 k = 1,则加 + 1,k-1 次。(4,1) 然后 (4,1,1)
如果您得到基本情况 k = n,请拆分并删除每个部分。
像这样:(3,3)然后(3,3,3)然后(2,2,2)
如果你得到基本情况 k < n,什么都没有
基本上,我的问题是将基本情况“堆叠”到顶部并获得完整列表 p(6,3) = [(2,2,2), (4,1,1), (3,2 ,1)]