A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吴在强 中级黑马   /  2013-2-6 13:54  /  1500 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

代码如下:
package cn.question.test;
public class FactorialTest {
  /**
  * @param args
  */
public static void main(String[] args) {
    doFactorial(5);  
  System.out.println("------------------------");
  long a = 0;
  a = doFactorila2(5);
  System.out.println("a="+a);
}
//遍历循环
public static long doFactorial(long n){
  long factors = 1;
  if(n<0){
   System.out.println("输入数字不符合规范");
  }
  else if(n == 0 || n == 1){
   return 1;
  }
  else{
   for(int i =1;i<n;i++){
    factors = factors * i;
   }
   System.out.println("factors="+factors);
  }
  return factors;
}

//递归方法
public static long doFactorila2(long n){
  //long factors = 1;
  long factors = 0;
  if(n<0){
   System.out.println("输入数字不符合规范");
  }
  else if(n != 0){
   return factors = n* doFactorila2(n-1);
  }
  System.out.println("factors输出结果为"+factors);
  return factors;
}
}

结果为:
factors=24
------------------------
factors输出结果为0
a=0

为什么我第二个递归方法输出的结果为零呢,它跟第一个递归方法传入的参数一样!我的递归也应该没问题啊!

3 个回复

倒序浏览
public static long doFactorila2(long n){
  //long factors = 1;
  long factors = 0;
//帅哥,看到没有,你的factors=0.呵呵。
  if(n<0){
   System.out.println("输入数字不符合规范");
  }
  else if(n != 0){
   return factors = n* doFactorila2(n-1);
  }
  System.out.println("factors输出结果为"+factors);
  return factors;
}
}

评分

参与人数 1技术分 +1 收起 理由
黄锦成 + 1 赞一个!

查看全部评分

回复 使用道具 举报
public static long doFactorila2(long n){
  //long factors = 1;
  long factors = 0;
  if(n<0){
   System.out.println("输入数字不符合规范");
  }
  else if(n != 0){
   return factors = n* doFactorila2(n-1);
  }
  System.out.println("factors输出结果为"+factors);
  return factors;
}
}

这个n=0怎么办啊。n=1呢???你把这两个规定下数据就好啦。
回复 使用道具 举报
嗯,好的,谢谢!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马