GESP 四级 · GESP 202412 C++ 四级 第 9 题

选择题 · 答案 A

← 整套速查表 GESP 四级 全部真题

题目

下面代码采用递推算法来计算斐波那契数列 $f(n) = f(n-1) + f(n-2)$,则横线上应填写( )。

int fib(int n) {
    if (n == 0 || n == 1)
        return n;

    int f1 = 0;
    int f2 = 1;
    int result = 0;
    for (int i = 2; i <= n; i++) {
        // 在此处填入代码
    }
    return result;
}

A.

result = f1 + f2;
f1 = f2;
f2 = result;

B.

result += f1 + f2;
f1 = f2;
f2 = result;

C.

result += f1 + f2;
f2 = result;
f1 = f2;

D.

result = f1 + f2;
f2 = result;
f1 = f2;
答案:A

解题思维

答案A。代码补全要考虑参数传递方式。如果需要修改实参,需用指针(*)传递。排序算法要理解每步比较的含义。

常见错误

排序代码补全要理解每步比较的含义。选择排序找最小值时比较的是array[min]>array[j]。

详细解析(节选)

1. 🎯 考纲定位(考点定位)

本题考查的是《GESP 考试大纲》四级算法模块中的递推(迭代)知识点。命题人把这道题放在这里,是因为它精准卡住了绝大多数考生的一个致命弱点:分不清循环中哪个变量是"新结果"、哪个是"待用旧值"。几乎所有同学都会把 result 当成最终答案,却忘了它在循环里是"递推中间量"。

2. 🧠 解题思维(拆解与通法)

看到题先想:斐波那契是 f(i) = f(i-1) + f(i-2)。循环里 i 从 2 开始,此时 f1 存的是 f(i-2),f2 存的是 f(i-1)。要算 f(i),先让 result = f1 + f2 得到新值,但 f1 和 f2 还得继续往后用,所以必须先保留旧 f2 才能让 f1 继承,再让 f2 继承新 result。通法:任何需要保存前两个状态并迭代的递推问题,都是先算新值,再按 f1 ← f2、f2 ← result 的顺序向后赋值。

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断