计算整数数组中每个元素的阶乘

时间:2017-03-20 17:07:53

标签: java arrays factorial

我需要创建一个在Java,upperborder和lowerborder中有2个参数的Method。此方法必须创建一个从数字2到数字10的数组 然后我必须实现另一种计算给定数字的阶乘的方法 然后我必须实现第三个方法,计算所创建数组中每个元素的阶乘,并在TestClass中测试所有这些方法。

我知道如何做到这一点,但显然我在代码中犯了一些错误,它给了我StackOverflow异常。我读了几次代码,但我似乎无法理解我错在哪里。

package fakultaetinarray;


public final class FakultaetinArray{
    private int i;
    private int[] a;
    private int j;

    public FakultaetinArray(){
        System.out.println("Given array : ");
        createArray(1, 9);
        System.out.println("Factorial for every element : ");
        FakinArray();

    }
    public int fakRe(int n){
        if(n == 1){
            return n;
        }
        return n * fakRe(n - 1);
    }
    public void createArray(int untergrenze, int obergrenze){
        this.a = new int[obergrenze];
        for(this.j = 1; j <= a.length; j++){
            a[i] = j + 1;
            System.out.println(a[i]);
        }
    }
    public void FakinArray(){
        a[0] = 2;
       for(i = 1; i < a.length; i++){
          int fak = fakRe(a[i]);
          a[i] = fak;
          System.out.println(fak);

       }

    }

}

2 个答案:

答案 0 :(得分:1)

您获得StackOverflowError的原因是由于您的递归方法没有n == 0的情况。

原因您的值将以0的形式出现,这取决于您构建循环的方式。

for(this.j = 1; j <= a.length; j++){
    a[i] = j + 1;
    System.out.println(a[i]);
}

目前还不清楚为什么你在这里使用ji被初始化为默认值0,所以在所有现实中,你只需要填充一个< / em>数组的元素具有正值,而所有其他元素都为零。

您需要重新考虑循环的构造方式。我强烈 鼓励您不要将它们设为字段,而是将它们声明为循环结构的一部分。

答案 1 :(得分:0)

if(n == 1){不足以阻止递归:n可以低于1.在您的特定情况下,您的情况n为0。

考虑在任何情况下将递归展开到一个简单的循环。根据经验,递归对于O(N)的东西并不好。