无论我尝试了什么,下面ArithmeticException
的代码都会抛出消息“非终止十进制扩展;没有精确的可表示的十进制结果。” 更大的数字(如 43、50、56 等)。
这是代码:
private BigDecimal catalan(int n) {
if (n <= 1) {
return BigInteger.ONE;
}
return BigDecimal.valueOf(4)
.multiply(BigDecimal.valueOf(n))
.subtract(BigDecimal.valueOf(2))
.divide(BigDecimal.valueOf(n).add(BigDecimal.ONE))
.multiply(new BigDecimal(catalan(n - 1)));
}
这种方法在小n
数字上完美无瑕,但当涉及到更高的值时,它会崩溃。