
设m,n均为自然数,m可表示为一些不超过n的自然数之和,f(m,n)为这种表示方式的数目。例f(5,
设m,n均为自然数,m可表示为一些不超过n的自然数之和,f(m,n)为这种表示方式的数目。例f(5,3)=5,有5种表示方式:3+2,3+1+1,2+2+1,2+1+1+...
设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(m,n)
int m,n;
{ if (m==1)
return__(1) ;
i[backcolor=rgba(255, 255, 255, 0)]if (n==1)
[backcolor=rgba(255, 255, 255, 0)] return__(2) ;}
[backcolor=rgba(255, 255, 255, 0)]if (m<n)
[backcolor=rgba(255, 255, 255, 0)] { return f(m,m);}
[backcolor=rgba(255, 255, 255, 0)]if (m==n)
[backcolor=rgba(255, 255, 255, 0)] return 1+__(3) ;}
[backcolor=rgba(255, 255, 255, 0)]return f(m,n-1)+f(m-n, (4) );
}
答案是 (1)1;(2)1;(3)f(m,n-1);(4)n。
谁能帮我解释一下这个算法
回复 展开
一下是该函数的程序段,请将未完成的部分填入,使之完整。
int f(m,n)
int m,n;
{ if (m==1)
return__(1) ;
i[backcolor=rgba(255, 255, 255, 0)]if (n==1)
[backcolor=rgba(255, 255, 255, 0)] return__(2) ;}
[backcolor=rgba(255, 255, 255, 0)]if (m<n)
[backcolor=rgba(255, 255, 255, 0)] { return f(m,m);}
[backcolor=rgba(255, 255, 255, 0)]if (m==n)
[backcolor=rgba(255, 255, 255, 0)] return 1+__(3) ;}
[backcolor=rgba(255, 255, 255, 0)]return f(m,n-1)+f(m-n, (4) );
}
答案是 (1)1;(2)1;(3)f(m,n-1);(4)n。
谁能帮我解释一下这个算法
回复 展开
展开全部
第一行定义了f(m,n)这个函数,返回值即表示方式的数目,为一个整数。
第二行定义了m和n这两个自变量为整数。
if (m==1)
return 1;
这里是说如果m等于1,则函数的返回值为1,显然1只能分解为1,也即表示方式只有一种。
if (n==1)
return 1;
这里是说如果n等于1,则函数的返回值为1,显然无论m多大,n为1时只能表示为m个1之和,也即表示方式只有一种。
if (m<n)
return f(m,m);
这里是说如果m小于n,则返回值为f(m,m),如果所有的加数都为自然数的话,则最大的加数是不会超过和的,因此在m小于n的情况下加数也必然小于m。
if (m==n)
return 1+f(m,n-1);
这里是说如果m等于n,则返回值为1+f(m,n-1),因为f(m,n)只比f(m,n-1)多了一个m=n的表示方法。
return f(m,n-1)+f(m-n,n);
最后是其他情况,即m大于n的情况,此时的表示方式由两部分组成,一是f(m,n-1),即最大加数为(n-1)时的表示方式数量;而剩下的表示方式则是最大加数为n的情况,因加数中至少有一个n,因此表示方式数量相当于剩下的数字m-n可表示为不大于n的自然数之和,按照函数的定义,表示方式的数量为f(m-n,n)。
第二行定义了m和n这两个自变量为整数。
if (m==1)
return 1;
这里是说如果m等于1,则函数的返回值为1,显然1只能分解为1,也即表示方式只有一种。
if (n==1)
return 1;
这里是说如果n等于1,则函数的返回值为1,显然无论m多大,n为1时只能表示为m个1之和,也即表示方式只有一种。
if (m<n)
return f(m,m);
这里是说如果m小于n,则返回值为f(m,m),如果所有的加数都为自然数的话,则最大的加数是不会超过和的,因此在m小于n的情况下加数也必然小于m。
if (m==n)
return 1+f(m,n-1);
这里是说如果m等于n,则返回值为1+f(m,n-1),因为f(m,n)只比f(m,n-1)多了一个m=n的表示方法。
return f(m,n-1)+f(m-n,n);
最后是其他情况,即m大于n的情况,此时的表示方式由两部分组成,一是f(m,n-1),即最大加数为(n-1)时的表示方式数量;而剩下的表示方式则是最大加数为n的情况,因加数中至少有一个n,因此表示方式数量相当于剩下的数字m-n可表示为不大于n的自然数之和,按照函数的定义,表示方式的数量为f(m-n,n)。
追问
第(3)(4)空还是不懂。
m<n时应该不能表示啊,返回错误才对嘛?可以用 f(6,4)讲一下过程不?
追答
mm,f(2,3)=f(2,2)。
而当m>n时,比如f(6,4),分成两类讨论:如果最大的加数为3,则按照定义共有f(6,3)种表示方法;而剩下的表示方法中必然有一个最大的加数4,由于总和为6,因此可知其余的加数之和为6-4=2,而要使小于等于4的自然数之和等于2,按照函数定义共有f(2,4)种可能性。因此f(6,4)=f(6,3)+f(2,4)。
2012-11-30
展开全部
今天 09:38frozencliffs| 六级第一行定义了f(m,n)这个函数,返回值即表示方式的数目,为一个整数。
第二行定义了m和n这两个自变量为整数。
if (m==1)
return 1;
这里是说如果m等于1,则函数的返回值为1,显然1只能分解为1,也即表示方式只有一种。
if (n==1)
return 1;
这里是说如果n等于1,则函数的返回值为1,显然无论m多大,n为1时只能表示为m个1之和,也即表示方式只有一种。
if (m<n)
return f(m,m);
这里是说如果m小于n,则返回值为f(m,m),如果所有的加数都为自然数的话,则最大的加数是不会超过和的,因此在m小于n的情况下加数也必然小于m。
if (m==n)
return 1+f(m,n-1);
这里是说如果m等于n,则返回值为1+f(m,n-1),因为f(m,n)只比f(m,n-1)多了一个m=n的表示方法。
return f(m,n-1)+f(m-n,n);
最后是其他情况,即m大于n的情况,此时的表示方式由两部分组成,一是f(m,n-1),即最大加数为(n-1)时的表示方式数量;而剩下的表示方式则是最大加数为n的情况,因加数中至少有一个n,因此表示方式数量相当于剩下的数字m-n可表示为不大于n的自然数之和,按照函数的定义,表示方式的数量为f(m-n,n)。
第二行定义了m和n这两个自变量为整数。
if (m==1)
return 1;
这里是说如果m等于1,则函数的返回值为1,显然1只能分解为1,也即表示方式只有一种。
if (n==1)
return 1;
这里是说如果n等于1,则函数的返回值为1,显然无论m多大,n为1时只能表示为m个1之和,也即表示方式只有一种。
if (m<n)
return f(m,m);
这里是说如果m小于n,则返回值为f(m,m),如果所有的加数都为自然数的话,则最大的加数是不会超过和的,因此在m小于n的情况下加数也必然小于m。
if (m==n)
return 1+f(m,n-1);
这里是说如果m等于n,则返回值为1+f(m,n-1),因为f(m,n)只比f(m,n-1)多了一个m=n的表示方法。
return f(m,n-1)+f(m-n,n);
最后是其他情况,即m大于n的情况,此时的表示方式由两部分组成,一是f(m,n-1),即最大加数为(n-1)时的表示方式数量;而剩下的表示方式则是最大加数为n的情况,因加数中至少有一个n,因此表示方式数量相当于剩下的数字m-n可表示为不大于n的自然数之和,按照函数的定义,表示方式的数量为f(m-n,n)。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询