黑马程序员技术交流社区

标题: 编写一个阶乘方法 [打印本页]

作者: 徐芾清    时间: 2014-2-22 16:09
标题: 编写一个阶乘方法
编写一个阶乘方法,要求:1、输入一个整数(如:5),返回该数的阶乘(如5!);
2、返回值类型:int;形参类型:int;

3、必须使用递归。



作者: 徐芾清    时间: 2014-2-22 16:20
zengming13 发表于 2014-2-22 16:16

哥们,挺快啊
作者: 乔青山    时间: 2014-2-22 16:34
//一个数的阶乘递归做
        public  static int recursion(int a){
                if(a==1){
                        return 1;
                }else{
                        return a*recursion(a-1);
                }
        }
       
        //阶乘和递归做(双递归)
        public static int factorial(int a){
                if(a>0){
//                        int b = 1;
//                        for(int i=1;i<=a;i++){
//                                b*=i;
//                        }
                        int b = recursion(a);                                //双递归
                        a=b+factorial(a-1);
                }
                return a;
        }
作者: 徐芾清    时间: 2014-2-22 16:38
乔青山 发表于 2014-2-22 16:34
//一个数的阶乘递归做
        public  static int recursion(int a){
                if(a==1){

哥们,你忘了0!=1注释一下,不是0不等于1啊,是0的阶乘等于1

作者: 乔青山    时间: 2014-2-22 16:41
徐芾清 发表于 2014-2-22 16:38
哥们,你忘了0!=1注释一下,不是0不等于1啊,是0的阶乘等于1

:L主要想递归,至于阶乘,实话实说,写程序之前2的阶乘是1!+2!还是2!我都不知道、、嗯,有的地方会有错误,阶乘我不大知道
作者: dongdong5982    时间: 2014-2-22 18:35
  1. public class Factorial {
  2.         public static void main(String[] args) {
  3.                 System.out.println(myFactorial(5));
  4.         }
  5.         public static int myFactorial(int var) {
  6.                 // 当值为1时直接返回1
  7.                 if(var == 1) {
  8.                         return 1;
  9.                 } else {
  10.                         // 当值不为1时,将该值减1后进行递归
  11.                         return myFactorial(var - 1) * var;
  12.                 }
  13.         }
  14. }
复制代码
话说,用int类型的话,范围有点小吧,很容易超出范围的,改为long的话应该会更好一点

作者: flying    时间: 2014-2-22 18:39
  1. public class Test3 {
  2.         public static void main(String[] args) throws Exception{
  3.                         BufferedReader bufr =
  4.                         new BufferedReader(new InputStreamReader(System.in));
  5.                         while(true){
  6.                                 int num=Integer.parseInt(bufr.readLine());
  7.                     System.out.println(fun(num));
  8.                         }
  9.                 
  10.         }
  11.         public static int fun(int num){
  12.                 if(num>0){
  13.                         return num*fun(num-1);
  14.                 }
  15.                 else
  16.                         return 1;
  17.         }
  18. }
复制代码

作者: 徐芾清    时间: 2014-2-22 19:41
乔青山 发表于 2014-2-22 16:41
主要想递归,至于阶乘,实话实说,写程序之前2的阶乘是1!+2!还是2!我都不知道、、嗯,有的地方会有错 ...

你准备哪一期?
作者: 徐芾清    时间: 2014-2-22 19:42
dongdong5982 发表于 2014-2-22 18:35
话说,用int类型的话,范围有点小吧,很容易超出范围的,改为long的话应该会更好一点
...

倒也对,这个倒没注意
作者: 徐芾清    时间: 2014-2-22 19:43
flying 发表于 2014-2-22 18:39

这个给力,连IO流都用上了
作者: swqsljy    时间: 2014-2-23 11:27
  1. import java.util.Scanner;

  2. /*
  3. 1、编写一个阶乘方法,要求:1、输入一个整数(如:5),返回该数的阶乘(如5!);
  4. 2、返回值类型:int;形参类型:int;
  5. 3、必须使用递归。
  6. */
  7. public class Question1 {
  8.         public static void main(String[] args) {
  9.                 Scanner in = new Scanner(System.in);
  10.                 int num = in.nextInt();                        //接收一个键盘输入的数字
  11.                 System.out.println(method(num));
  12.         }
  13.         private static int method(int num) {
  14.                 // 当值为1时直接返回1
  15.                 if (num == 1) {
  16.                         return 1;
  17.                 } else {
  18.                         // 当值不为1时,将该值减1后进行递归
  19.                         return method(num - 1) * num;
  20.                 }
  21.         }

  22. }
复制代码

作者: KeepCoding    时间: 2014-2-23 14:48

  1.         public static int recursion(int num) {
  2.                 if (num == 1) {
  3.                         return 1;
  4.                 } else {
  5.                         return num * recursion(num - 1);
  6.                 }
复制代码






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