理解递归:判断数组是否含0的递归函数异常问题排查
问题根因
- 数组越界访问:C 语言数组下标从 0 开始计数,长度为
length的数组合法下标范围为0 ~ length-1,你的代码初始调用时直接访问randomArray[length]属于数组外的非法内存,该内存存储的值是未定义的,大概率会随机读到 0,直接触发返回 true。 - 缺少递归终止条件:代码没有设置递归停止边界,当
length递减到小于 0 时仍会继续访问非法内存,永远不会返回 false,只要遍历过程中任意一块非法内存的值为 0,就会返回 true。
修复方案
调整下标访问逻辑,新增递归终止条件,修复后的代码如下:
bool containZero(int randomArray[], int length) { // 递归终止:遍历完全部元素未找到0,返回false if (length <= 0) { return false; } // 访问当前合法下标对应的元素 if (randomArray[length - 1] == 0) { return true; } return containZero(randomArray, length - 1); }
修复说明
- 新增终止逻辑:当长度递减到 0 时说明所有元素已经遍历完成,没有找到 0 直接返回 false,避免无限递归和越界访问
- 调整访问下标:将原来的
randomArray[length]改为randomArray[length - 1],确保每次访问的都是数组的合法内存位置
内容的提问来源于stack exchange,提问作者scarydog1
相关产品推荐
相关产品推荐

