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
相关产品推荐
相关产品推荐

