频道栏目
首页 > 资讯 > 其他 > 正文

m表示为一些不超过n的自然数之和解析

18-07-21        来源:[db:作者]  
收藏   我要投稿

/*
设m,n均为自然数,m可表示为一些不超过n的自然数之和,
f(m,n)为这种表示方式的数目。
例:f(5,3)=5,有五种表示方式:
3+2,3+1+1,2+2+1,2+1+1+1,1+1+1+1+1
*/

#include
int f(int m, int n);
int main()
{
int m,n,ans;
scanf("%d%d",&m,&n);
ans = f(m,n);
printf("%d\n",ans);
}
int f(int m, int n)
{
if(m == 0) return 0;
if(n == 0) return 0;
if(n == 1) return 1;
if(m==n) return (1+f(m,n-1));
else if(m>n) return (f(m-n,n)+f(m,n-1));
else return f(m,m);
}

第一行定义了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
再问: 第(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)。

相关TAG标签
上一篇:MATLAB读取PhysioNet数据的简单方法
下一篇:stl函数的运用实例(一)
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站