递归函数在调用自身时,必须满足( ),以避免无限递归?
递归问题关注两点:① 递归边界(终止条件);② 递归关系(递推公式)。分析时展开前几步即可看出规律。
注意递归深度过大会导致栈溢出。递归必须包含终止条件,否则造成无限递归。
【考点】递归通法|终止条件设计
🎯 考纲定位 GESP 五级算法模块"递归与回溯"第 3 个考点。命题人盯住"背了递归定义却不会写终止条件"的漏洞——80% 考生选错,因为把"参数变化"当成必然要求,其实只是常见模式。
🧠 解题思维 看选项:A 是绝对必要条件,没有终止条件递归必死循环;B 是"常见模式"而非要求(比如用标志位也能终止);C 与终止无关;D 把无关项凑成"都对"陷阱。通法:判断递归题,先找"何时停止"(终止条件),再找"如何逼近停止"(状态变化),最后验证"是否可能永远达不到停止"。
🪤 陷阱拆解 错选 B 的人把"参数递减"当成必然,忽略了用计数、标志、返回值判断等替代方案;错选 C 的人混淆了"返回值"与"终止条件";D 利用"以上都对"的惯性思维,让人以为 B、C 都合理。最阴险细节:题目用括号"( )"暗示填空,但选项里混入无关项,考的是"必要性"而非"充分性"。
🔄 反命题思维 如果改问"递归函数参数必须满足什么才能避免无限递归?"答案还是 A。如果加条件"假设参数每次至少减 1",B 就变成充分条件。刷到递归题,先问自己:这道题到底在考"终止条件"还是"状态变化"?