黑马程序员技术交流社区

标题: 递归的问题 [打印本页]

作者: 李晓璐    时间: 2011-7-31 19:45
标题: 递归的问题
class factorialTest{
static int factorial(int arg){
if(arg==0){ return 1; }else{ return arg*factorial(arg-1); }
}
public static void main(String[] args){
System.out.println(factorial(0));
System.out.println(factorial(1));
System.out.println(factorial(2));
System.out.println(factorial(20));
System.out.println(factorial(50));
}
}
答案是:1
             1
             2
            -2102132736
              0
为什么factorial(20)是负数?为什么factorial(50)是0?
作者: 匿名    时间: 2011-7-31 19:50
是越界了,你那个数儿太大了,像下面这样就可以了
public class factorialTest{
static double factorial(int arg){
if(arg==0){
  return 1;
  }
else{
  return arg*factorial(arg-1);
  }
}
public static void main(String[] args){
System.out.println(factorial(0));
System.out.println(factorial(1));
System.out.println(factorial(2));
System.out.println(factorial(20));
System.out.println(factorial(50));
}
}
运行结果:
1.0
1.0
2.0
2.43290200817664E18
3.0414093201713376E64
作者: 匿名    时间: 2011-8-1 12:59
我觉得那个参数类型改成long更合适
作者: 匿名    时间: 2011-8-1 18:34
这是一个计算阶乘的程序,20!数字太大,越界了,int类型表示不了这么大的数字。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2