用递归算
算法如下:
!,设P(n)为整数n的不同划分个数
2,q(n,m)表示在整数n的所有不同划分中,将最大加数n1不大于m的划分个数记做q(n,m);
建立递归关系,分别有如下情况:
1,q(n,1)=1,n>=1;
2,q(n,m)=q(n,n),m>=n;
3,q(n,n)=q(n,n-1)+1;正整数n的划分和n1<=n-1的划分组成
4,q(n,m)=q(n,m-1)+q(n-m,m),n>m>1
代码如下:
public int q(int n,int m){
if((n<1)||(m<1))return 0;
if((n==1)||m==0)return 1;
if(n<m)return q(n,n);
if(n==m)return q(n,m-1)+1;
return q(n,m-1)+q(n-m,m);
}
以前搞过这个问题,思想大体就是这样,不太容易理解,但理解之后挺有意思的,参照书上的,非原创; |