递归训练:平衡拆分区间¶
Codex(GPT-6):应用平衡分治,减少递归调用深度。程序 alternative.cpp 与逐项递归并列,满足递归要求并通过完整正式数据。
对非空区间 \([l,r)\) ,若只有一个元素就直接返回。否则令 \(m=l+\lfloor(r-l)/2\rfloor\) ,依次递归求 \([l,m)\) 与 \([m,r)\) 的最大值,再返回两者较大值。
两个子区间不相交且恰好覆盖原区间。假设递归分别返回它们的最大值,则合并结果正是全部元素的最大值。每次区间缩小且始终非空,最终到达单元素区间;由归纳得到正确性。
递归树有 \(n\) 个单元素叶子,每个内部结点恰有两个孩子,因此内部结点有 \(n-1\) 个,总时间为 \(O(n)\) .沿任一调用链,区间长度近似减半,栈深度和额外栈空间为 \(O(\log(n+1))\) .左右调用顺序执行,不会同时保存整棵递归树。输入数组仍占 \(O(n)\) ,总空间为 \(O(n)\) .
这种结构适合扩展到较长序列,但接口和区间拆分比逐项递归多一步。当前两种实现都足以处理题目范围。