我需要创建一个在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);
}
}
}
答案 0 :(得分:1)
您获得StackOverflowError
的原因是由于您的递归方法没有n == 0
的情况。
原因您的值将以0
的形式出现,这取决于您构建循环的方式。
for(this.j = 1; j <= a.length; j++){
a[i] = j + 1;
System.out.println(a[i]);
}
目前还不清楚为什么你在这里使用j
,i
被初始化为默认值0,所以在所有现实中,你只需要填充一个< / em>数组的元素具有正值,而所有其他元素都为零。
您需要重新考虑循环的构造方式。我强烈 鼓励您不要将它们设为字段,而是将它们声明为循环结构的一部分。
答案 1 :(得分:0)
if(n == 1){
不足以阻止递归:n
可以低于1.在您的特定情况下,您的情况n
为0。
考虑在任何情况下将递归展开到一个简单的循环。根据经验,递归对于O(N)的东西并不好。