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

  所谓的整数的分割,是指将一个正整数写成若干个正整数的和。要求整数的所有分割数目,我们用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 }

 

转载于:https://www.cnblogs.com/renb/p/10091833.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值