下面 C++ 函数中采用的算法是( )。
int fib(int n)
{
int i, f[n] = {0, 1};
for (int i = 2; i <= n; i++)
f[i] = f[i - 1] + f[i - 2];
return f[n];
}答案A。在循环中遍历数组并累积结果时,注意累加变量的初始值和每次循环的更新方式。
for循环体可能一次都不执行!这是和while循环一样的"先判断后执行"机制。
【考点】递推|数组|循环
1. 🎯 考纲定位:GESP 四级“算法基础”模块,命题人用斐波那契递推式卡住“混淆实现方式与算法本质”的弱点——循环/递归只是代码写法,递推才是数学定义。
2. 🧠 解题思维:看到"f[i]=f[i-1]+f[i-2]"立刻识别为“当前项由前两项确定”的递推关系;数组存中间结果、循环做计算步骤,但算法归类只看数学规律,通法:凡“用前几步结果算下一步”的都是递推,不管用循环还是递归实现。
3. 🪤 陷阱拆解:B 选项“递归”是典型偷换概念——代码没有递归调用;C/D 泛泛而谈实现手段,没触及算法核心;A 才是精准对应“递推式定义”。只背“循环=迭代”就会掉坑。
4. 🔄 反命题思维:若把循环改成递归,答案仍是 A,因为算法本质未变。刷到类似题先问“题目定义的是数学规律还是代码写法?”