递归分析照抄书上的,具体请参考《计算机算法设计与分析》 第9页。
在正整数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)=1+q(n,n-1);
(4)q(n,m)=q(n,m-1)+q(n-m,m), n>m>1;
正整数n的最大加数n1不大于m的划分由n1=m的划分和n1<=m-1的划分组成。
代码如下:
public class IntegerPartition
{
public static int q(int n,int m)
{
if((n<1)||(m<1)) return 0;
if((n==1)||(m==1)) 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);
}
public static void main(String[] args)
{
int a=q(6,6);
System.out.println(a);
}
}