设 m、n 均为大于 0 的整数,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 x,int y)
{
int a,b;
if(x==1||y==1||x*y==0) return 1;
else
{
a=x/y;b=x-a*y;
if(a==1) return f(b,b)+f(x,y-1);
else return f(x-y,y)+f(x,y-1);
}
}
main()
{
int m,n,c;
scanf("%d %d",&m,&n);
printf("%d\n",f(m,n));
}
终极递归,正确理解函数返回值的实际意义,建立正确数学模型