递归算法必须有一个明确的结束条件,否则会导致无限递归并可能引发栈溢出。
分治三步:分解(Divide)→ 解决(Conquer)→ 合并(Combine)。归并排序的关键在于合并两个有序子数组。
归并排序递归划分时,边界容易出错。注意 merge 的区间范围是左闭右开还是闭区间。
【考点】递归|栈溢出
本题考查递归算法的基本性质,属于 GESP 五级“算法基础”模块核心考点。命题人卡住的是“懂调用不懂原理”的考生——背过模板却不知为何必须终止。
看到“递归”先想“函数自调用”,关键观察是“无终止条件会导致无限调用”。推理依据是:每次递归都会压栈,缺少终止条件时栈帧无限增长,必然溢出。这类题通法是“回溯法思维”——任何递归都隐含调用栈,必须考虑栈空间有限性。
选项 B 设计成“错误”,利用的是“只记模板不深究原理”的误区——以为递归只是语法糖,可以无限调用。题目最阴险的细节是“必须”二字,看似绝对实则精准;若只背结论不理解“栈帧压入”机制,就会误判。
换个考法:若题目改成“递归算法可以不设置结束条件,只要循环次数足够”,答案会变吗?不会,因为递归本质是函数调用,循环控制无法替代终止条件。刷到类似题时,先问自己“命题人想考我什么”——是考栈机制,还是考递归定义。