整数的划分数
一个正整数可以表示成一系列的正整数之和:
N=n1+n2n+n3+n4...nk
被称为正整数n的一个划分。我们以6为例。
6=6;
6=5+1
6=4+2 6=4+1+1
6=3+3 6=3+2+1 6=3+1+1+1
6=2+2+2 6=2+2+1+1 6=2+1+1+1+1
6=1+1+1+1+1+1
我们可以用递归推出其中的关系
p(n,m)标记为正整数n的所有不同划分中,最大加数不大于m的划分个数。
当m=1时
P(n,m)=1
当m>n时
P(n,m)=P(n,n)
当m=n时
P(n,m)=P(n,n-1)+1
当n>m>1时
P(n,m)=P(n,m-1)+p(n-m,m)
代码实现
#include<stdio.h>
int p(int n,int m)
{
if(m==1||n==1)
return 1;
if(n<m)
return p(n,n);
if(n==m)
return p(n,m-1)+1;
else
return p(n,m-1)+p(n-m,m);
}
int main()
{
int a;
scanf("%d",&a);
printf("%d",p(a,a));
}