用P(n,m)来表示整数划分,n为要划分的数,m为后面不能超过的数
例:n=7时
7
6+1
5+2 5+1+1
4+3 4+2+1 4+1+1+1
3+3+1 3+2+2 3+2+1+1 3+1+1+1+1
2+2+2+1 2+2+1+1+1 2+1+1+1+1+1
1+1+1+1+1+1+1
P(7,4)=p(7,3)+以4开头的个数
这里将开头的4去掉得结果
+3 +2+1 +1+1+1---->P(3,3)---->P(7-4,4);
P(7,7)=P(7,6)+1 这里的1是7开头的个数
P(7,6)=p(7,5)+P(1,6)
得出结论
P(n,m)=P(n,m-1)+P(n-m,m)
m=1时只有一种情况,就是全1
n<m时m为后面不能超过的数 P(n,n)
例:n=7时
7
6+1
5+2 5+1+1
4+3 4+2+1 4+1+1+1
3+3+1 3+2+2 3+2+1+1 3+1+1+1+1
2+2+2+1 2+2+1+1+1 2+1+1+1+1+1
1+1+1+1+1+1+1
P(7,4)=p(7,3)+以4开头的个数
这里将开头的4去掉得结果
+3 +2+1 +1+1+1---->P(3,3)---->P(7-4,4);
P(7,7)=P(7,6)+1 这里的1是7开头的个数
P(7,6)=p(7,5)+P(1,6)
得出结论
P(n,m)=P(n,m-1)+P(n-m,m)
m=1时只有一种情况,就是全1
n<m时m为后面不能超过的数 P(n,n)
n=m时 P(n,m-1)+1
实现代码:
#include <iostream>
using namespace std;
int fh(int n, int m)
{
if(m==1)
return 1;
if(n<m)
return fh(n,n);
if(n==m)
return 1+fh(n,m-1);
return fh(n,m-1)+fh(n-m,m);
}
int main()
{
cout<<fh(7,7)<<endl;
return 0;
}