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

System.IndexOutOfRangeException异常排查:递归求和函数报错求助

排查C#递归求和函数的System.IndexOutOfRangeException异常

我帮你梳理下递归函数里的几个关键问题,正是这些问题导致了索引越界和逻辑错误:

1. 数组索引越界的核心原因

假设你调用递归时传入的len是数组的长度,那num[len]必然超出数组的有效索引范围——因为C#数组的索引是从0开始,最后一个元素的索引是len-1。比如数组长度是5,有效索引是0-4,访问num[5]就会直接触发IndexOutOfRangeException。

2. 递归终止条件逻辑错误+未初始化变量

你的终止条件写的是if (len==0) return sum3=sum3+num[0];,这里有两个问题:

  • sum3是局部变量,没有初始化就直接参与运算,这会导致未定义的行为(C#里甚至可能编译不通过);
  • 终止逻辑完全错误:当递归到len==0时,意味着没有元素需要求和了,应该返回0而不是去访问num[0]。

3. 变量名拼写错误

你在递归调用时写了get_sum_recur(num,length-1),但参数名是len,这里的length是未定义的变量,这会直接导致编译错误,得修正为len-1。

修正后的递归函数

我帮你重新写了正确的版本,注释里标了关键逻辑:

public static int get_sum_recur(int[] num, int len)
{
    // 终止条件:当len为0时,没有元素需要求和,返回0
    if (len == 0)
        return 0;
    // 取当前最后一个元素(索引为len-1),加上前面len-1个元素的递归求和结果
    return num[len - 1] + get_sum_recur(num, len - 1);
}

调用的时候,传入数组的长度即可,比如:

int[] arr = {1,2,3,4,5};
Console.WriteLine("递归求和结果:{0}", get_sum_recur(arr, arr.Length));

另外顺便提一下你的get_sum_while函数也有个小问题:sum2没有初始化,应该改成int sum2 = 0;,否则初始值是随机的,求和结果会不正确。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:02:24