数列 1, 1, 2, 3, 5, 8 … 是以意大利数学家列昂纳多·斐波那契命名的数列,从第三个数开始,每个数是前面两项之和。如果计算该数列的第 $n$ 项(其中 $n>3$)$fib(n)$,我们采用如下方法:① 令 $fib(1)=fib(2)=1$ ②用循环 for i=3 to n 分别计算 $f(i)$ ③输出 $fib(n)$。这体现了递推的编程思想。
这题考递推算法在循环里的实现。拿到题先抓定义:斐波那契从第三项起每一项等于前两项之和。再看代码流程:初始化前两项,循环从3到n,每次算f(i)=f(i-1)+f(i-2)。只要边界和递推式对得上,逻辑就通,不用纠结“分别计算”这几个字是不是在忽悠你。
最容易错在死抠字眼。看到“分别计算 f(i)”就慌,觉得是不是要写一堆赋值语句,或者怀疑循环本身有问题。其实命题人就是想看你懂不懂递推的本质——前两项已知,后面每一项都是前两项相加。只要循环从3开始,每次把当前项算出来,逻辑就完全正确。选项B是干扰项,专门坑那些只背结论、没理解计算流程的人。
GESP 四级《算法与程序设计》模块明确要求掌握递推思想。命题人放这道题,核心意图就是区分“背过斐波那契公式”和“真正理解计算流程”的考生。这道题看似简单,实则要求对“前两项之和”的递推关系和循环边界有精准把握。
看到题,先抓住定义核心:从第三项起,每一项等于前两项相加。再看方法描述:①初始化 fib(1)=fib(2)=1,②循环 i 从 3 到 n,③输出 fib(n)。这里的关键是验证循环体是否真的实现了“前两项之和”——方法里虽未写出具体赋值语句,但“分别计算 f(i)”结合斐波那契定义,显然指的就是 f(i)=f(i-1)+f(i-2)。 循环起点 i=3 恰好对应数列第三项,终点 i=n 保证计算出第 n 项,输出 fib(n) 自然得到答案。整个流程与定义完全吻合,故选 A。
选项 B“错误”是典型干扰。命题人利用的误区有三:一是混淆循环边界——若循环从 i=2 开始,会重复计算 fib(2),虽然值没变但逻辑冗余;二是误以为“分别计算”意味着要单独写多条赋值语句,其实一次循环迭代就完成;三是偷换概念——把“计算 f(i)”理解为求和公式而非两项相加。最阴险的细节是“分别计算 f(i)”这个表述,表面看似乎需要多条语句,实则只是强调循环体内针对每个 i 进行计算,并非额外操作。只背结论不理解本质的人,看到“分别计算”就会本能地怀疑。
换一换条件:若把循环改成“for i=2 to n”,此时 fib(2) 会被重新赋值为 fib(1)+fib(0)=1+0=1,值没变,但逻辑上是冗余操作,严格说仍算正确。若改成“for i=3 to n-1”,则 fib(n) 永远没被计算,输出的是 fib(n-1),答案直接变错。刷到类似题时,先问自己:命题人改这个边界想让我掉进哪个坑?
递推是算法模块的高频考点。题库共考过 79 题,覆盖 7 个级别。逐年分布:2007年1题、2009年1题、2015年1题、2018年1题、2023年12题、2024年23题、2025年24题、2026年13题、null年3题。分赛事:GESP 六级34题、GESP 七级27题、GESP 八级10题、GESP 五级3题、NOIP 提高组 初赛3题、CSP 提高级1题、NOIP 普及组 初赛1题。 从数据看,2023-2025 年递推类题目数量激增(2025 年达 24 题),说明该考点在近期考试中权重极大。结合 GESP 四级侧重基础算法思想的特点,未来极大概率会继续以“斐波那契”、“爬楼梯”、“青蛙跳”等经典递推模型为载体,考察循环边界判断和变量更新逻辑。暂无足够依据预测具体题型变化,但建议重点强化循环起始值与终止值的敏感度训练。