我有这小段代码,用于查找某些数字的总和:
public class TestClass {
public static int sumOfNums(int num[], int int) {
if(int == num.length-1) return int;
else if( (num[int]%2==0) || num[int] <= 0 ) {
return num[int] + sumOfNums(num, int+1); }
else return 0 + sumOfNums(num, int+1);
}
public static void main(String[] args) {
int[] arr = {-2,0,8,4,5,6,10,-5,-2,7,9};
System.out.println(sumOfNums(arr, 0));
}
}
但是,每当我运行print语句时,都会出现异常:
Exception in thread "main" java.lang.StackOverflowError
at TestClass.sumOfNums(TestClass.java:13)
at TestClass.sumOfNums(TestClass.java:10)
有人可以帮助我吗?
答案 0 :(得分:1)
正如另一个用户所说,您的递归永远不会结束。
将arr[head-1]
更改为head-1
可以解决以下问题:
else return 0 + sumNegEven(arr, arr[head-1]);
并在此处进行更改:
return arr[head] + sumNegEven(arr, arr[head-1]); }
答案 1 :(得分:0)
public class TestClass {
public static int sumNegEven(int arr[], int head) {
if(head == 0) {
return 0;
} else if( arr[head]%2==0 || arr[head] <= 0 ) {
return arr[head] + sumNegEven(arr, head-1);
} else {
return 0 + sumNegEven(arr, head-1);
}
}
public static void main(String[] args) {
int[] arr = {-2,0,8,4,5,6,10,-5,-2,7,9};
System.out.println(sumNegEven(arr, arr.length-1));
}
}
通过调用arr [head-1],您正在调用索引值而不是索引,并且它们持续很长时间,因为递归没有终止。如果您呼叫head-1,则您正在呼叫实际索引,并且将毫无例外地得到答案21。
答案 2 :(得分:0)
这不会处理数组中的第一项
if(head == 0) {
return 0;
}
您将不得不将其更改为
if(head < 0) {
return 0;
}