GESP 五级 · GESP 202312 C++ 五级 第 18 题

判断题 · 答案 B · 考点:函数

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

题目

以下 C++ 代码能以递归方式实现斐波那契数列,该数列第 1、2项为 1,以后各项均是前两项之和。( )

int Fibo(int N)
{
    if (N == 1 || N == 2)
        return 1;
    else
    {
        int m = fiboA(N - 1);
        int n = fiboB(N - 2);
        return m + n;
    }
}
答案:B

考点

函数

解题思维

这题别光盯着递推公式看,代码里藏着致命陷阱。拿到题先扫一眼函数调用名,发现 Fibo 里调的是 fiboA 和 fiboB,而这两个函数在题面里根本没定义。递归函数若调用未定义函数,编译必挂,所以直接选 B。

常见错误

很多考生容易掉进‘逻辑陷阱’,只验证了递推关系 f(n)=f(n-1)+f(n-2) 和基值条件 f(1)=f(2)=1 都正确,就以为代码没问题,从而误选 A。其实命题人专门卡‘函数定义完整性’这一环,考生往往忽略被调函数的存在性,只关注当前函数的逻辑。

详细解析(节选)

【考点】递归实现|函数定义完整性

本题位于 GESP 五级 C++ 试卷,考察递归函数实现与函数定义完整性两个核心知识点。命题人把这道题放在这里,就是要卡住那些‘只看函数名和主体逻辑,不检查整体代码’的考生——五级考生已经具备递归调用能力,但必须意识到递归函数往往需要配合辅助函数才能完整运行。

解题链条很清晰:先看函数名 Fibo 和递推公式 m + n,立刻联想到斐波那契递归实现;再看基值条件 N == 1 || N == 2 返回 1,符合斐波那契定义;但关键一步不能跳过——检查递归调用中的被调用函数名。发现代码里写的是 fiboA(N - 1) 和 fiboB(N - 2),这两个函数在题面给出的代码片段中完全没有定义。递归函数若调用未定义的函数,编译必然失败,因此该代码无法正确实现斐波那契。

通法总结:判断递归代码是否完整,三步走——验证递推关系、确认基值条件、必须检查所有被调函数是否都已定义。

陷阱拆解:选项 A 是典型‘逻辑陷阱’:考生容易被 Fibo 函数内部的递归结构吸引,觉得‘递推公式对、基值对,那就是正确的’,从而忽略函数名不一致这个致命问题。命题人利用的就是考生‘重逻辑、轻细节’的常见弱点。这里没有使用绝对化表述,而是用函数名差异制造隐蔽错误——如果你只背‘斐波那契递归怎么写’的结论,遇到这种题目就会掉坑。

反命题思维:如果命题人把 fiboA 和 fiboB 改成 Fibo,答案就变成 A;如果把基值条件里 N == 2 删掉,递归就会无限下探导致栈溢出。刷到类似题,先问自己:这个递归函数依赖的其他函数都定义了吗?

考频与趋势:递归函数在题库共考过 115 题,覆盖 8 个考试级别(2007-2026);逐年分布:2007 年 4 题、2008 年 4 题、2009 年 2 题、2010 年 2 题、2012 年 2 题、2013 年 3 题、2014 年 1 题、2019 年 2 题、2020 年 1 题、2021 年 5 题、2022 年 2 题、2023 年 7 题、2024 年 25 题、2025 年 15 题、2026 年 18 题、null 年 22 题;分赛事:GESP 五级 35 题、CSP 入门级 32 题、GESP 六级 12 题、NOIP 提高组 初赛 10 题、CSP 提高级 9 题、NOIP 普及组 初赛 8 题、GESP 七级 7 题、GESP 八级 2 题。从数据看,递归函数是 GESP 五级的高频考点(35 题),且近年考频持续上升(2024 年 25 题、2025 年 15 题、2026 年 18 题),说明命题人越来越喜欢用‘细节陷阱’来区分考生。

预测:基于给定数据与经验,未来 GESP 五级及 CSP 入门级仍会高频考查递归函数,但形式可能更隐蔽——比如调用未定义函数、函数名大小写不一致、或递归参数传递错误等。暂无足够依据预测具体年份的考频,但考生应重点训练‘检查函数定义完整性’这一习惯,避免掉进逻辑陷阱。

同考点真题

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