我在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));
}
}
Run Code Online (Sandbox Code Playgroud)
我只是不知道问题是什么.当我用笔和纸进行程序时,它会加起来,但它仍然不起作用.
提前致谢!
编辑:
感谢大家帮帮我.我把我变成了--i.我不知道有什么区别!
更改i--到i-1.表达式i--实际返回i,然后递减.
或者,您可以使用预减量运算符:--i.这样,它i首先递减,然后返回值.但是,你真的不需要在i这里变异,所以只是使用i-1可能是最有意义的.
因为i--返回相同的值i(然后在之后递减),这意味着您的递归调用sumRec(a, i--)等效于sumRec(a, i).这就是为什么你得到无限递归(导致StackOverflowError).
| 归档时间: |
|
| 查看次数: |
61 次 |
| 最近记录: |