1 楼: ヤマザキ266e77
就是因爲結果超過int的最大值了,所以得到的這個結果。
如果超過最大值,則會重新從最小值繼續向上加來計算。
你可以試試2147483647 + 1 的結果,就明白這個意思了。
所以你這裏計算最好使用double類型
2 楼: 日上之禾
import java.math.BigDecimal;
public class Four1 {
public static void main(String args[]){
System.out.println(sum(new BigDecimal(30)));
}
public static BigDecimal sum(BigDecimal n){
BigDecimal bd = new BigDecimal(1);
if(n.equals(bd)){
return bd;
}
else
return mum(n).add(sum(n.subtract(bd)));
}
//
public static BigDecimal mum (BigDecimal n){
BigDecimal bd = new BigDecimal(1);
if(n.equals(bd)){
return bd;
}
return n.multiply(mum(n.subtract(bd)));
}
3 楼: 如夢★初醒℃
你這個算的是30!+29!+28!+……+2!+1吧?
很明顯結果超出了int的範圍啊。
4 楼: 堯__不可及
這個計算出來的值是很大的,用long都不夠,你可以吧mum()和sum()的返回值設爲double
30!+29!+...+2!+1!你可以用google去算一下大概是 2.744E32
5 楼: 百度網友2a06c5a
數字太大了,按照二進制轉換了。
6 楼: zeus_flo
遞歸沒結束前肯定溢出了