【发布时间】:2012-12-27 11:23:48
【问题描述】:
求和数的多少组合(代码中的变量n)。例如:
3 = 1+1+1 = 2+1 = 3 => ANS 为 3
5 = 5 = 4+1 = 3+2 = 3+1+1 = 2+2+1 = 2+1+1+1 = 1+1+1+1+1 => ANS 为 7
在以下示例中,m 是最大数,n 是总和,
目的是找出它有多少(总和)组合。
我只想知道为什么p(n, m) = p(n, m - 1) + p(n - m, m)?
这里的代码:
int p (int n, int m)
{
if (n == m)
return 1 + p(n, m - 1);
if (m == 0 || n < 0)
return 0;
if (n == 0 || m == 1)
return 1;
return p(n, m - 1) + p(n - m, m);
}
赞赏!
【问题讨论】:
-
所以你想一个一个地计算每个排列?
-
我认为是组合,这种情况下3+2和2+3没有区别。
-
我猜它来自这里:en.wikipedia.org/wiki/…
-
不一样,这里的函数使用不大于m(小于等于)的数字,但是wiki中的case是使用大于等于k的数字。
-
我想您希望我们通过组合参数来证明
p(n,m)的递归关系是正确的,但是您忘记为该函数提供组合定义!这不是一个公平的要求。
标签: algorithm recursion integer-partition