我正在尝试编写一个程序来计算最多为阶乘的阶乘之和。所以,如果我给它3它将返回3! + 2! + 1!到目前为止,这是我的代码:
import java.math.BigInteger;
import java.util.Scanner;
public class sumOfFactorial {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int n = input.nextInt();
System.out.println(sum(n));
}
public static BigInteger sum(int n) {
return factorial(n).add(sum(n-1));
}
public static BigInteger factorial(int n) {
BigInteger x = BigInteger.valueOf(n);
if (n == 1) return BigInteger.ONE;
else return x.multiply(factorial(n-1)); //error occurs here
}
}
由于某种原因,它在指定的位置给出了堆栈溢出错误。我该如何解决这个问题?
答案 0 :(得分:3)
您正在嵌套两个递归方法sum
和factorial
。但是,您的sum
递归方法没有基本情况。与factorial
一样,它必须具有基本情况。请确保sum
停止在基本情况下递归,在您的情况下,n
等于1
。
答案 1 :(得分:2)
你的一个问题就在这里
public static BigInteger sum(int n) {
return factorial(n).add(sum(n-1));
}
试
public static BigInteger sum(int n) {
if(n > 1){
return factorial(n).add(sum(n-1));
} else if (n < 0){
throw new IllegalArgumentException("factorials are not defined for negative integers");
} else {
return BigInteger.ONE;
}
}