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