因子递归

时间:2014-11-13 14:36:03

标签: java recursion

我搜索过该网站,虽然已多次回答,但我还有一个问题。

我有使用递归进行阶乘的代码。我只是遇到了最简单的部分。

打印时,我的项目要求打印:

4! is equal to 4 x 3 x 2 x 1 = 24

如何获得for循环或递归方式让"(4 x 3 x 2 x 1)"使用任何n值?

import java.util.Scanner;

public class Factorial 
{
    public static void main(String args[])
    {
        System.out.println("Enter an integer:");
        Scanner keyboard= new Scanner(System.in);
        int num=keyboard.nextInt();
        System.out.print(num+ "!"+ " is equal to ");
        Print(num);
        System.out.print(FactorialCalc(num));
    }

    public static double FactorialCalc(int number)
    {
        double result;
        if(number<=1)
        {    
            result= 1;                  
            return result;
        }    
        else
        {
            return result= number * FactorialCalc(number-1);
        }
    }

    public static void Print(int n)
    {
        for(int i=n; i<=0;i--)
        {
            System.out.print(n + 'x' + (n-1));
        }
    }
}

4 个答案:

答案 0 :(得分:4)

public static void Print(int n) {
    for (int i = n; i > 0; i--) {
        System.out.print(i);
        if (i == 1) {
            System.out.print("=");
            continue;
        }
        System.out.print("x");
    }
}

输出:

Enter an integer:
4
4! is equal to 4x3x2x1=24.0

答案 1 :(得分:0)

使用for循环的一个非常简单的解决方案是

int fact=1;
for(int i=1;i<n;i++)
fact=fact*i;

答案 2 :(得分:0)

你的代码有效,你只忘了一件事:

哪个变量用于计算Print方法中for循环的迭代次数?它在循环中的价值是什么?

public static void Print(int n)
{
    for(int i=n; i<=0;i--) //i minor or equal 0? When does the loop need to finish?
                           //What happens if you multiply something with 0?
    {
        System.out.print(n + 'x' + (n-1));
    }

}

尝试自己动手,但如果你不能......

  

...问题是您正在打印n而不是i。在循环中,通过i递减的变量为i--。它从num开始变得越来越小......这就是你需要打印的内容!
昌河印刷到:

System.out.print(i + "x");

 你的任务是摆脱最后打印的x! ; d

 根据循环条件,当i达到1时,循环必须停止
 (num)x(num-1)x .. x 2 x 1 (没有0 !!)
 因此条件为for(int i = n; i >= 1;i--)

答案 3 :(得分:0)

您可以将相乘值列表直接打印到递归中,而不是添加循环打印。在递归的print()if子句中添加适当的else语句。对于前者,只需打印"1 = "即可。对于后者,请打印number + " x "

您实际上并不需要本地变量result。我还建议使用关于大小写的Java约定:方法名称应以小写字母开头,大写字母表示类或接口。最后,我将返回类型更改为long,因为阶乘是基于整数的,即使它们可以很快变大。

import java.util.Scanner;

public class Factorial {
   public static long printFactorial(int number) {
      if(number <= 1) {    
         System.out.print("1 = ");
         return 1;
      } else {
         System.out.print(number + " x ");
         return number * printFactorial(number-1);
      }
   }

   public static void main(String args[]) {
      System.out.print("Enter an integer: ");
      Scanner keyboard= new Scanner(System.in);
      int num=keyboard.nextInt();
      System.out.print(num + "! is equal to ");
      System.out.println(printFactorial(num));
   }
}