You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

理解递归:判断数组是否含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);
}

修复说明

  1. 新增终止逻辑:当长度递减到 0 时说明所有元素已经遍历完成,没有找到 0 直接返回 false,避免无限递归和越界访问
  2. 调整访问下标:将原来的 randomArray[length] 改为 randomArray[length - 1],确保每次访问的都是数组的合法内存位置

内容的提问来源于stack exchange,提问作者scarydog1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 07:45:03