5.下列程序的输出结果是( )。
#include <iostream>
using namespace std;
int f(int a, int b)
{
if (a == 1)
return b;
if (b == 1)
return a;
return f(a-1, b) + f(a, b-1);
}
int main()
{
cout << f(3, 5) << endl;
return 0;
}
【解析】由于f ()函数有两个参数a和b,我们可以画一个二维表格,在二维表格中第a行第b列的格子中记录f (a,b)的返回值,可以发现:
● 当a等于1时,第a行第b列的格子中的数值为b;
● 当b等于1时,第a行第b列的格子中的数值为a;
● 当a和b均大于1时,第a行第b列的格子中的数值等于其左边和上边相邻的两个格子的数值之和,即f (a,b) = f (a-1,b)+f (a,b-1)。
这样,就可以画出一个3行5列的二维表格,见表2.11。f (3,5)的返回值即为表格中第3行第5列的格子中的数值,即41。
表2.11
第1列 | 第2列 | 第3列 | 第4列 | 第5列 | |
---|---|---|---|---|---|
第1行 | 1 | 2 | 3 | 4 | 5 |
第2行 | 2 | 4 | 7 | 11 | 16 |
第3行 | 3 | 7 | 14 | 25 | 41 |
【答案】C