求整数的所有不同分割数目

  所谓的整数的分割,是指将一个正整数写成若干个正整数的和。要求整数的所有分割数目,我们用p(n,m)表示在n的分割中极大值为m的分割数目,则有以下几种情况:
    1.m=1。即分割的所有整数都为1,只有一种分法,如4=1+1+1+1;
    2.n=1。分割的结果为本身,只有一种分法;
    3.n=m。此时,极大值为n的分割只有一个,除此之外为极大值为n-1的分割,所以p(n,n)=1+p(n,n-1)
    4.n<m。不可能,但可改为求p(n,n)
    5.n>m,最常见的一种。此时问题可分解为n的分解中一个m都没有和至少有一个m两种情况:当n的分割中一个m都没有,则等同于p(n,m-1);当至少有一个m,即:n=m+...   则n-m=...,它的极值最大可到m,表示为p(n-m,m).
  依照上述分析,很容易得出该解法的递归程序:

 1 unsigned long comput(int number,int maximum){
 2     if(number==1||maximum==1)
 3         return 1;
 4     else if(number==maximum){
 5         return 1+comput(number,number-1);
 6     }else if(number<maximum){
 7         return comput(number,number);
 8     }else{
 9         return comput(number,maximum-1)+comput(number-maximum,maximum);
10     }
11 }

 

posted on 2018-12-09 16:17  Lucifer_Rb  阅读(155)  评论(0编辑  收藏  举报

导航