早教吧 育儿知识 作业答案 考试题库 百科 知识分享

求表示方法设m、n均为自然数,m可表示为一些不超过n的自然数之和,f(m,n)为这种表示方式的数目.求表示方法设m、n均为自然数,m可表示为一些不超过n的自然数之和,f(m,n)为这种表示方

题目详情
求表示方法 设 m、n 均为自然数,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.

请编写程序,计算f(m,n)的值.
#include
int main()
{
int m,n;
scanf("%d%d",&m,&n);
printf("%d\n",f(m,n));
}
int f(int m,int n)
{
if(n>m) n=m;
if(m==0&&n!=0) return (1);
if(m!=0&&n==0) return (0);
else if(m>=n)
return(f(m,n-1)+f(m-n,n));
}
不知道哪错了,求指导~
▼优质解答
答案和解析
先说下语法错误吧.
自定义函数必须先申明.或放在引用该函数的函数的前面.
在则.当n>m&&m=0;时n=m;使n=0;这时也应返回1;
比如输入1 1时1=1;而你的程序将这种情况排除了.
#include
int f(int m,int n)
{
if(n>m) n=m;
if(m==0) return (1);
if(m!=0&&n==0) return (0);
else if(m>=n)
return(f(m,n-1)+f(m-n,n));
}
其实还可以化简为
#include
int f(int m,int n)
{
if(m==0) return 1;
if(n==0) return 0;
if(n>m) n=m;
return(f(m,n-1)+f(m-n,n));
}
int main()
{
int m,n;
scanf("%d%d",&m,&n);
printf("%d\n",f(m,n));
}
int main()
{
int m,n;
scanf("%d%d",&m,&n);
printf("%d\n",f(m,n));
}