黑马程序员技术交流社区

标题: JAVA书写n的阶乘递归与非递归实现? [打印本页]

作者: zly1992008    时间: 2014-6-8 21:30
标题: JAVA书写n的阶乘递归与非递归实现?
本帖最后由 zly1992008 于 2014-6-9 18:41 编辑

一道公司笔试题~非常有意义

作者: iWilliam    时间: 2014-6-8 21:45
看看这段代码,刚写的
public class Tes
{
        public static void main(String[] args)
        {
                System.out.println(getFactorial(5));
                System.out.println(getFactorial2(5));
        }
        public static int  getFactorial(int n)
        {
                if(n == 0)
                        return 1;
                else if(n==1)
                        return 1;
                else if(n == 2)
                        return 2;
                else
                        return n*getFactorial(n-1);
        }
        public static int getFactorial2(int n)
        {
                if(n == 0)
                        return 1;
                int val = 1;
                for(int i =1; i<=n ; i++)
                        val *=i;
               
                return val;
        }
}



作者: zly1992008    时间: 2014-6-8 23:36
还可以简化些~,看起来有点不美观
作者: 夏日蓝雪    时间: 2014-6-9 10:45
/**
需求:递归与非递归方式实现n的阶乘。
思路:递归方式,除了0和1都返回1外,其他调用(n*自身);
      非递归方式,用for循环不断迭乘实现,但要排除0。
*/
public class Practice {
public static void main(String[] args)
{
        System.out.println(diGui(4));
        System.out.println(feiDiGui(4));
       
}
static int diGui(int n)//递归方式实现
{
        if(n==0||n==1)
                return 1;
        else
                return n*diGui(n-1);
}
static int feiDiGui(int n)//非递归方式实现
{
        if(n==0)
                return 1;
        else
                for(int i=n-1;i>1;i--)
                        n=n*i;
        return n;
}
}

作者: zly1992008    时间: 2014-6-9 11:19
夏日蓝雪 发表于 2014-6-9 10:45
/**
需求:递归与非递归方式实现n的阶乘。
思路:递归方式,除了0和1都返回1外,其他调用(n*自身);

赞一个!~
作者: wyqs92    时间: 2014-6-9 16:05
  1. import java.util.Scanner;

  2. /**
  3. 需求:递归与非递归实现n的阶乘。
  4. */
  5. public class DemoClass {
  6. public static void main(String[] args)
  7. {

  8.         Scanner in=new Scanner(System.in);
  9.         int num=in.nextInt();
  10.         //        非递归
  11.         int resu1=jiecheng1(num);
  12.         System.out.println(resu1);
  13. //        递归
  14.         int resu2=jiecheng2(num);
  15.         System.out.println(resu2);
  16. }

  17. public static int jiecheng2(int num) {//递归
  18.         // TODO Auto-generated method stub
  19.         if(num>1){
  20.                 num=num*jiecheng2(num-1);
  21.                
  22.         }
  23.         return num;
  24.         }
  25.        
  26.        
  27.        


  28. public static int jiecheng1(int num) {        //非递归
  29.         // TODO Auto-generated method stub
  30.         int j=num;
  31.         for(int i=j;i>1;i--){
  32.                 num=num*(i-1);
  33.         }
  34.         return num;
  35. }


  36. }
复制代码





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