你打印下 Integer.MAX_VALUE + 1; 看看

解决方案 »

  1.   

    int 的范围最大值为 2.147483647E9 ,输入22后,结果值完全超出了int的存储范围,然后前面的很多位就被舍弃了,然后剩下的值算出来可能就是你得到的这个负值了。将返回值类型改为long,可以计算到20,21还是超范围
    private static long printJiChen(int i) {
            if(i==1) {
                return 1;
            }
            else
                return i*printJiChen(i-1);
        }
      

  2.   

    用bigdecimal吧!    private static BigDecimal printJiChen(BigDecimal i) {
         if(i.equals(new BigDecimal(1))) {
         return i;
         }else{
         return i.multiply(printJiChen(i.subtract(new BigDecimal(1))));
         }
        }
      

  3.   

    哦,了解一下int的范围;int最大值加1等于最小值