终止条件应写为 index >= size,因数组索引合法范围是 0 到 size-1,index == size 已越界,>= 可覆盖所有非法情况,且对空数组、误增索引等场景更鲁棒。

递归遍历数组的终止条件怎么写
终止条件必须明确指向「当前处理位置超出数组边界」,否则必然栈溢出。最常见写法是用索引与数组长度比较,而不是判断元素值或依赖外部标志。
为什么 index >= size 是安全的终止判断
数组索引从 0 开始,合法范围是 0 到 size - 1,所以当 index == size 时已越界,index > size 更不用说。用 >= 能覆盖所有非法情况,比 == 更鲁棒。
- 若传入空数组(
size == 0),index == 0时立即触发终止 - 若递归中误将
index多加一次,>=仍能兜底,而==可能跳过终止导致崩溃 - 避免用
index 作循环条件再反向推导终止逻辑——容易在多分支里漏写
递归调用时索引怎么传才不越界
每次递归必须推进状态,且推进方式要和终止条件严格对齐。常见错误是忘记加 1、加了两次、或在分支里漏掉递归调用。
void traverse(int arr[], int index, int size) {
if (index >= size) return; // 终止条件
printf("%d ", arr[index]);
traverse(arr, index + 1, size); // 必须 +1,且只加一次
}
- 入口调用必须是
traverse(arr, 0, size),不能从-1或1开始 - 不要在 if 分支外再写一次
traverse,否则重复执行 - 如果要反向遍历(从末尾往头),终止条件仍是
index ,但递归调用得写 <code>index - 1,二者必须匹配
用指针做参数时终止条件怎么改
如果用指针代替索引(比如 int* ptr),终止条件就得换成地址比较,不能混用索引逻辑。
void traverse_ptr(int* ptr, int* end) {
if (ptr >= end) return;
printf("%d ", *ptr);
traverse_ptr(ptr + 1, end);
}
-
end指向数组末尾的下一个位置(即&arr[size]),这是 C/C++ 迭代器惯用法 - 用
ptr + 1推进,不是ptr++(后者会修改原指针) - 千万别写成
if (*ptr == 0)——这假设数组以 0 结尾,实际完全不可靠
递归本身不难,但终止条件和状态推进这两处只要有一处错位,程序就停不下来。尤其注意空数组、单元素、边界索引这三个测试用例,必须手动走一遍递归路径。
C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!











