就像Federico指出的那样,问题可能出在你的factorial()或pow()中.我运行了一个测试,它可以用Math类中提供的pow()函数替换你的函数,并且这个factorial():
public static long factorial(long n) { if (n < 0) throw new RuntimeException("Underflow error in factorial"); else if (n > 20) throw new RuntimeException("Overflow error in factorial"); else if (n == 0) return 1; else return n * factorial(n-1); }