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

C++递归求数组元素和 接收用户输入时输出错误原因排查

C++递归数组求和交互运行结果异常问题

复现代码

#include<iostream>
using namespace std;
int getSum(int *arr, int size) {
    if(size == 0) {
        return 0;
    }
    if(size == 1 )
    {
        return arr[0];
    }
    int remainingPart = getSum(arr+1, size-1);
    int sum = arr[0] + remainingPart;
    return sum;
}

int main() {
    int arr[100], n;
    cin >> n;
    for(int i = 0; i < n; i++){
        cin >> arr[n];
    }
    int sum = getSum(arr, n);
    cout << "Sum is " << sum << endl;
    return 0;
}

异常运行输出

3
1
2
3
Sum is -1827678256

问题根因

错误出在数组输入环节的下标使用上,和递归求和逻辑本身没有关系:

  • 输入循环的遍历变量是i,但接收输入值时写入的数组位置固定为arr[n],全程没有用到i做下标。
  • 这意味着你输入的n个数字,全部被覆盖写到了数组下标为n的同一个位置,参与求和计算的arr[0]到arr[n-1]这n个元素,从来没有被赋值,存储的是栈内存上的随机垃圾值。
  • 递归求和时累加的全是这些未初始化的垃圾值,自然会算出不符合预期的负数结果。
  • 固定输入能得到正确结果,是因为固定赋值的逻辑直接给arr[0]到arr[n-1]赋了确定值,绕过了这个有bug的输入流程,所以没有触发异常。

修复方案

只需要修改输入循环的数组下标,把固定的n换成遍历变量i即可:

for(int i = 0; i < n; i++){
    cin >> arr[i];
}

修改后输入的数值会按顺序存入数组对应位置,递归求和就能返回正确结果。

内容的提问来源于stack exchange,提问作者Nayan Prasad P K

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 06:48:29