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

