用C++编写一个结构算法:

来源:百度知道 编辑:UC知道 时间:2024/05/28 12:23:25
设M,N均为自然数,M可表示一些不超过的自然数之和,试编写函数F(m,n)计算这种表示方式的数目。例如F(5,3)=5,有5种表示方式:3+2,3+1+1,2+2+1,2+1+1+1,1+1+1+1+1

int f(int m,int n)
{
if(m <0 || n <0)
return 0;
if(m==1 || n==1)
return 1;
if(m <n)// m不可能小于n ,这时需要处理为m==n
return f(m,m);
if(m==n)//如果m==n ,组合个数m本身+ 最大是n-1时的组合个数
return 1+f(m,n-1);
else //m>n
return f(m,n-1)+f(m-n,n);
}