
【信奥教练心得】二级的坑递推题的边界项为什么总被漏掉——从B4575直角三角形数列说起样例过了不代表你写对了摘要2026年9月GESP考试我带的二级学生2人里只过了1人。翻卷一看栽的不是难题是第一题——一道入门级的递推数列题。学生不是不会公式是漏掉了对前两项的边界判断。更危险的是这个错误在样例上完全看不出来。本文从这道题切入拆解边界项遗漏这个低级错误为什么高发、怎么预防给出一套递推题的通用解题模板。目录 引子二级2过1栽在第一题 题目拆解B4575 直角三角形数列⚠️ 典型错误漏掉前两项的边界判断 教学反思为什么学生会漏️ 训练方法递推题的通用模板 结语边界感是编程的底层能力 引子二级2过1栽在第一题2026年9月的GESP成绩出来了我带的二级学生2个人里只过了1个。挂掉的那个孩子平时模拟考一直挺稳我原以为他稳过。结果一问栽在了第一题——B4575直角三角形数列。这是整场考试的第一道题难度标的是入门。按说应该是送分的。可他偏偏就没做出来。我让他把代码发过来。公式没问题循环没问题变量更新也没问题——唯独漏了两行判断第一项和第二项是否超过上限。// 他漏掉的就是这两行if(amax_c){cout1endl;return0;}if(bmax_c){cout2endl;return0;}就差这么两行一旦遇到第一项就超上限或者第二项超上限的测试点整道题直接清零。后来我拿这道题问了其他几个学生发现漏的不止他一个。有人是压根没写这两行有人写了却把条件用成了还有人判断写对了、输出的项数却搞错了。一道入门题挖出一串问题。这篇文章就来聊聊——递推题里前几项的边界判断为什么总被学生漏掉 题目拆解B4575 直角三角形数列先把题目摆出来。题目描述小双刚学会勾股定理得知直角三角形斜边的平方等于两直角边的平方和。他由此创造了一个直角三角形数列前两项由自己指定从第三项起每一项的平方等于前两项的平方和。比如第一项是3.0、第二项是4.0第三项就是 √(3.0²4.0²)5.0。现在给定数列的前两项和一个上限问数列从第几项开始会超过这个上限输入三行分别是第一项a、第二项b、上限max_c均为正数且a b。输出第一个超过上限的项的序号。样例输入3.0 / 4.0 / 10.0 输出6数列为3.0 → 4.0 → 5.0 → 6.403… → 8.124… → 10.344…第6项超过10.0。正确解法思路很直接先判断前两项再从第三项开始递推。#includebits/stdc.husingnamespacestd;intmain(){doublea,b,limit;cinablimit;// 先判断前两项if(alimit){cout1endl;return0;}if(blimit){cout2endl;return0;}// 从第三项开始递推intterm3;doubleprev2a,prev1b;while(true){doublecurrsqrt(prev2*prev2prev1*prev1);if(currlimit){couttermendl;break;}prev2prev1;prev1curr;term;}return0;}关键就两点前两项单独判断——它们虽然不代入公式但同样可能超过上限。超过是严格大于不是大于等于。⚠️ 典型错误漏掉前两项的边界判断这道题最典型的错误就是二话不说直接进循环前两项连看都不看// 错误示范漏掉了前两项的判断intmain(){doublea,b,limit;cinablimit;intterm3;doubleprev2a,prev1b;while(true){doublecurrsqrt(prev2*prev2prev1*prev1);if(currlimit){couttermendl;break;}prev2prev1;prev1curr;term;}return0;}拿几组数据跑一下后果一目了然输入 (a, b, limit)正确答案漏判断的输出错在哪5, 10, 31第1项就超了3没判断a3, 10, 52第2项超了3没判断b3, 4, 1066碰巧对最阴的是第三组——正常样例下漏了也能过。因为样例的前两项都没超过上限判不判断结果都一样。学生过完样例心里美滋滋地觉得稳了结果交上去碰到a或b超上限的测试点直接WA还懵懵地不知道错在哪。这和第十三篇讲的黑白格是同一个坑样例没覆盖边界情况错误就被掩盖了。另一个常见错误和搞混题目说超过上限。中文里超过是严格大于得用。可不少学生写成了if(currlimit){...}// 错如果某一项刚好等于上限按就算超过了但等于明明不算超过。举个例子a3, b4, limit5。第三项正好是5按判断5不超过5继续推第四项6.4才真正超过答案是4。可要是按判断第三项5就被当成超过了输出3——错了。 教学反思为什么学生会漏这个错误看着挺低级但真不是粗心两个字能打发的。背后有几层原因。原因一题目描述的暗示效应题目原文是这么写的数列前两项由小双指定从第三项开始数列中的每个数字的平方等于前两项的平方和。这句话进到学生脑子里自动翻译成了“前两项不用算第三项才开始用公式。”于是注意力全扑在公式怎么写、循环怎么转上压根没想起来——前两项是不用算但它们也可能超过上限啊题目强调了什么学生就盯着什么没被强调的部分自动过滤掉。这就是注意力隧道。原因二“给定的项被当成了不用判断的项”学生做递推题时脑子里默认是这么个画面第1项 → 第2项 → 第3项 → 第4项 → ... 给定 给定 公式 公式他觉得第1、2项是题目给的是起点不用处理。可题目问的是第几项超过上限这个判断得从第1项就开始不是等公式启动了才开始。“给定的项不等于不用判断的项”。这层区分很多学生没建立起来。原因三循环变量的第3项暗示不少学生写循环时心里默念的是我现在算的是第3项for(inti3;;i){doublecsqrt(a*ab*b);...}i 3这个起点又给从第3项开始的认知加了一层码。前两项在代码里连个判断的影子都没有漏掉也就顺理成章了。原因四样例带来的虚假安全感前面那张表里样例数据3, 4, 10的前两项都没超上限所以漏不漏判断输出都是6。学生跑完样例心里一块石头落地得写对了。戒心一卸就再也不会回头检查了。样例通过 ≠ 代码正确。样例只能说明不矛盾不代表覆盖了所有情况。️ 训练方法递推题的通用模板讲道理不够得给学生能上手的方法。我总结了一套递推题的通用模板帮他们养成先边界、后递推的习惯。第一步读完题先问三个问题碰到递推数列题读完先在草稿纸上过一遍第一项是什么它可能超过/满足条件吗第二项是什么它可能超过/满足条件吗公式从第几项开始用那之前的项要不要单独判断把这三问练成肌肉记忆见着递推题就自动走一遍。第二步用极端数据验证代码写完先别急着跑样例自己捏两组极端输入第一项就满足条件比如这道题a100, b200, limit1输出应该是1。第二项满足、第一项不满足比如a1, b100, limit50输出应该是2。这两组要是输出不对前两项的判断肯定漏了。这比跑样例管用多了——样例一般不会给你极端情况。第三步记住先边界、后递推的代码结构让学生把这个模板记下来// 1. 处理边界项前几项if(第1项 满足条件){输出1;return;}if(第2项 满足条件){输出2;return;}// 2. 从公式开始的那一项进入循环intterm公式开始的项数;// 比如这道题是3while(true){计算当前项;if(当前项 满足条件){输出 term;break;}更新前两项;term;}模板不是让他们死背是帮他们建立先把边界项处理干净再进循环的结构意识。循环里只管递推前几项的事已经了了。第四步关键词翻译成精确符号看到超过→ 翻成看到不超过→ 翻成看到不少于→ 翻成看到恰好→ 翻成这和第十三篇的关键词替换法是一脉相承的。读题时把自然语言立刻翻成代码里的比较符别含含糊糊地带过。 结语边界感是编程的底层能力回到开头那个挂掉的学生。他不是不会写递推——公式、循环、变量更新全对。他缺的是一种**“边界感”**动手递推之前先想一想起点本身会不会就是答案。这种边界感不只在二级的递推题里用得上。三级的数组题遍历之前先想空数组怎么办“只有一个元素怎么办”。四级的字符串题处理之前先想空串怎么办“第一个字符就是目标怎么办”。五级的排序题排序之前先想已经有序了怎么办“全是重复元素怎么办”。编程里一半的bug都出在边界上。而边界感的培养得从二级这种基础题开始练。我常跟学生说写代码之前先别急着敲循环。花10秒钟想想最前面那几项会不会就是答案。10秒钟换一道题的分。太值了。 专栏回顾第一篇《从语法讲解到思维锻造我的信奥教学实战总结》——教材设计、认知难点、表格追踪法第二篇《信息学学习之乐思维、工具与自我对话》——计算思维、数学英语、自检习惯第三篇《从无从下手到拿下大题——一套完整的解题教学闭环》——五步闭环法、警惕答案记忆、学会提问、可视化演算第四篇《比方法更重要的是找到适合他的节奏》——学生分类、年龄段差异、认知架构、可持续精力管理第五篇《让学生把思考的路走完比走对更重要》——完成感、温故知新、先走完再优化第六篇《懂了是最危险的信号》——能力错觉、双重检测、脚手架微操、证明错误法、自我验证闭环第七篇《AI靠思考链解题学生做编程题也该如此——一道题改了四遍才过的四步》——读题复述、I/O优先、分阶段调试、错误回顾、认知学徒制、教师脆弱性、有效失败、元认知训练第八篇《AI替你思考但替不了你记住——让学生上黑板画知识图谱》——GESP知识图谱、数字校验、组块压缩、检索提取、知识结构化、认知外包、生成效应、自我调节学习第九篇《从《模仿游戏》到黑框框放烟花——信奥教学中两个阶段的兴趣激活》——零基础电影入门、CMD动画破冰、情境兴趣、信息差距理论、生产性困惑第十篇《从拆主机到手算运算符——信奥课堂中的参与式教学》——具身认知、主动学习、认知冲突、支架式教学、六层参与递进第十一篇《GESP模拟考是一面X光——不同学生在考场里暴露的真实状态》——通过策略、巧思与拘谨、循环草稿技能、假性理解、有效失败、考后追问、强制反思第十二篇《GESP考级和信息学竞赛到底差在哪——一张图讲清楚路径选择》——GESP vs 竞赛本质区别、三阶段路径图、CSP-J/S→NOIP→NOI→IOI→ACM完整竞赛体系、类型判断、地基价值第十三篇《考场上最值钱的能力用三重否定法避免读题翻车》——P10719黑白格案例、读题错误三大原因、关键词替换/极端条件/逐句翻译三重法、考场仪式、日常训练第十四篇本文《二级的坑递推题的边界项为什么总被漏掉》——B4575直角三角形数列、前两项边界判断遗漏、样例虚假安全感、递推题通用模板、边界感培养如果这篇文章对你有帮助欢迎点赞、收藏、转发。你的学生有没有过前几项忘判断的经历评论区聊聊。延伸阅读B4575 [GESP202609 二级] 直角三角形数列洛谷题目链接可提交自测。详见 洛谷 B4575第十三篇三重否定法本文提到的关键词替换法和极端条件验证的详细讲解。详见专栏第十三篇GESP官方认证标准CCF发布的CPython认证知识体系。详见 GESP认证标准关于作者一名在信息学奥赛一线教学多年的教练。专注于C编程教学、编程思维训练与教学策略研究。专栏「信奥教学手记」持续更新中分享真实课堂案例与教学方法沉淀。