编程语言
首页 > 编程语言> > 函数f(m,n)算法设计

函数f(m,n)算法设计

作者:互联网

题目:

设m,n均为自然数,m可表示为一些不超过n的自然数之和,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 == 1)   return ___;
    if(n == 1)   return ___;
    if(m < n)   return f(m,m);
    if(m == n)     return 1 + ___;
	return f(m,n-1) + f(m-n,___);
}

解析:

我们先对已给出代码进行分析:

int f(int m, int n)   //定义f(m,n)函数,返回值表示方式的数目,返回值类型为整数.
{
    if(m == 1)   return ___;   //当m=1时,显然1只能分解为1+0,即表示方式只有一种,返回值应为1
    if(n == 1)   return ___;   //当m=1时,显然无论m多大,n为1时只能表示为m个1之和,即表示方式只有一种,返回值应为1
    if(m < n)   return f(m,m);   //见下方说明1
    if(m == n)     return 1 + ___;   //见下方说明2
	return f(m,n-1) + f(m-n,___);   //见下方说明3
}

答案:

故答案为:

int f(int m, int n)
{
    if(m == 1)   return 1;
    if(n == 1)   return 1;
    if(m < n)   return f(m,m);
    if(m == n)     return 1 + f(m,n-1);
	return f(m,n-1) + f(m-n,n);
}

标签:表示,return,函数,int,加数,算法,返回值,设计,___
来源: https://www.cnblogs.com/DX3906le/p/sf001.html