求整数的所有不同分割数目
所谓的整数的分割,是指将一个正整数写成若干个正整数的和。要求整数的所有分割数目,我们用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) 编辑 收藏 举报