我在Java中尝试了这个非常简单的递归,每次运行它时都会得到一个StackOverflow-Error.我确实有一个结束递归的条件,但它仍然无法正常工作.
public class Rec { public static int arraySumRecursive(int[] a) { return sumRec(a, a.length-1); } private static int sumRec(int[] a, int i) { if(i == 0) { return a[i]; } else { return a[i] + sumRec(a, i--); } } public static void main(String[] args) { int[] test = {1, 7, 2, 5}; System.out.println(arraySumRecursive(test)); } }
我只是不知道问题是什么.当我用笔和纸进行程序时,它会加起来,但它仍然不起作用.
提前致谢!
编辑:
感谢大家帮帮我.我把我变成了--i.我不知道有什么区别!
更改i--
到i-1
.表达式i--
实际返回i
,然后递减.
或者,您可以使用预减量运算符:--i
.这样,它i
首先递减,然后返回值.但是,你真的不需要在i
这里变异,所以只是使用i-1
可能是最有意义的.
因为i--
返回相同的值i
(然后在之后递减),这意味着您的递归调用sumRec(a, i--)
等效于sumRec(a, i)
.这就是为什么你得到无限递归(导致StackOverflowError).