求解一题C++简单题
Description
一个简单的计算,你需要算出 f(m, n),其定义如下:
f(m, n) = n , (m = 1)
m , (n = 1)
f(m - 1, n) + f(m, n - 1) , (m > 1 and n > 1)
Input
第一行包含一个整数 T (1 ≤ T ≤ 100),表示下面的数据组数。
以下 T 行,其中每组数据有两个整数 m, n (1 ≤ m, n ≤ 2000), 中间用空格隔开。
Output
对每组输入数据,你需要计算出 f(m, n) ,并输出。每个结果占一行。
Sample Input
2
1 1
2 3
Sample Output
1
7
#include<stdio.h>
int bubble(int c,int d);
int main(void)
{
int a,b,t,m,i;
while(scanf("%d",&m)==1){
for(i=1;i<=m;i++){
scanf("%d%d",&a,&b);
if(b>a){
t=a;a=b;b=t;}
printf("%d\n",bubble(a,b));}
}
return 0;
}
int bubble(int c,int d)
{
if(c==1)return d;
else if(d==1)return c;
else if(c>1&&d>1)return bubble(c-1,d)+bubble(c,d-1);
}
我知道有个递归的方法 ,不过时间太长,中间有很多是重复计算的,大哥们帮我把递归改进下减少重复.
请附加说明下算法