设 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)的值。
输入:
m n
输出:
f(m,n)的值
这个要自己推导递推公式,口述很麻烦,可以去搜一下,不过最好自己想一想。
上代码
#include<stdio.h>
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);
}