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

C++使用递归查找vector最大值触发段错误问题求助

问题根源

  • 核心错误是使用了**后置自增运算符i++**传递递归参数:
    后置自增的特性是先返回变量的当前值,再执行变量自增操作。也就是说你调用find_max(integer_array, i++)时,实际传入下一层递归的参数还是当前i的原值,自增操作是在参数传递完成后才执行的。这就导致每一层递归的i值永远和上一层相同,永远触发不了i == integer_array.size()-1的终止条件,最终无限递归引发栈溢出,触发段错误。
  • 次要优化点:你当前是值传递vector,每次递归都会拷贝整个数组,会额外消耗内存和时间,虽然不是段错误的直接原因,但建议改成const引用传递。

修正方案

把递归调用的参数i++替换为i+1即可,该写法没有副作用,也不会触发运算符求值顺序的坑,修改后的代码如下:

// 把vector改为const引用传递,避免不必要的数组拷贝
int find_max(const vector<int>& integer_array, int i) {
    if(i == integer_array.size()-1) {
        return integer_array[i];
    }
    // 直接用i+1传递下一层的索引
    return max(integer_array[i], find_max(integer_array, i + 1));
}

// 调用方式不变:find_max(vector_array, 0);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 20:48:03