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

C++递归函数对数组有效但对vector无效的原因及解决方法

问题原因与解决方案

核心原因:参数传递方式差异

  • 你的accum函数中,vector采用值传递:每次调用accum(v, len-1)时,都会创建一个vector的副本,递归过程中修改的都是这个副本的内容,main函数里的原vector完全不会被改动。
  • 数组作为参数时,会自动退化为指针,本质是传递原数组的内存地址:递归中修改的是原数组的内存空间,所以能直接改变原数组的值。

修复方案:改用引用传递vector

把函数参数里的vector<int> v改成vector<int>& v(引用传递),这样递归过程中操作的都是原vector的内存,修改会直接作用到原对象上。

修改后的完整代码:

#include <iostream>
#include <vector>
using namespace std;

void accum(vector<int>& v, int len)
{
    if (len == 1){
        return;
    }
    accum(v, len-1);
    v[len-1] += v[len-2];
}

int main()
{
    vector<int> v = {1, 3, 6, 4, 8};
    accum(v, 5);
    for (int i = 0; i < 5; i++) {
        cout << v[i] << " ";
    }
    return 0;
}

运行这段代码会输出预期的1 4 10 14 22。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 12:30:42