当前位置:  开发笔记 > 编程语言 > 正文

Java中的简单递归出错

如何解决《Java中的简单递归出错》经验,为你挑选了1个好方法。

我在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.我不知道有什么区别!



1> DaoWen..:

更改i--i-1.表达式i--实际返回i,然后递减.

或者,您可以使用预减量运算符:--i.这样,它i首先递减,然后返回值.但是,你真的不需要在i这里变异,所以只是使用i-1可能是最有意义的.

因为i--返回相同的值i(然后在之后递减),这意味着您的递归调用sumRec(a, i--)等效于sumRec(a, i).这就是为什么你得到无限递归(导致StackOverflowError).

推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有