数据集合
分析搜索、排序与递归
追踪算法边界、递归调用与输入规模对工作量的影响。
示例使用 Java。可在这里阅读和追踪,在 Java 环境中运行;工作室执行的是伪代码。
明确算法保证的性质
线性搜索逐个检查元素,直到找到匹配或到达末尾。二分搜索维护已排序的候选范围,并排除不可能含目标的一半。不能对任意未排序数组直接使用二分搜索。
插入排序中,当前位置之前的前缀已排序。将较大元素右移,再把下一个元素放入此前缀。通过小规模追踪检查移动时是否覆盖了仍需要的值。
可交互
12
25
39
412
517
要查找 12。从第 1 项开始。
步骤 1 / 5
递归需要推进与基本情况
递归方法在更小或更简单的问题上调用自身,基本情况不再递归。sumTo(3) 等待 sumTo(2),后者等待 sumTo(1),再等待 sumTo(0)。返回值随后沿调用栈逐层传回。
下面方法的前置条件是 n >= 0,n = 3 时输出 6。追踪调用还不够,也要记录返回时等待执行的加法。测试 n = 0 以验证停止条件。
public class Demo {
public static int sumTo(int n) {
if (n == 0) { return 0; }
return n + sumTo(n - 1);
}
public static void main(String[] args) {
System.out.println(sumTo(3));
}
}自我检测
递归中若调用 sumTo(n) 而不是 sumTo(n - 1),会发生什么?查看答案
问题规模没有缩小。n 为正时永远到不了基本情况,调用栈最终会溢出。
编写这些课程时使用的参考资料
我们在编写本课程时参考了这些官方文件,用以确定考纲结构和课程要求。
College Board · 2025 年秋季起适用