如何在不使用循环的情况下打印阶乘?

时间:2013-10-24 15:47:58

标签: java recursion factorial

我做了一个递归方法来计算阶乘,但在主方法中我使用了for循环来计算阶乘列表。有没有办法在主方法中不使用循环来计算阶乘列表?

代码:

public class FactInt {
    public static void main(String[] args) {
        for (int n = 1; n < 11; n++)
            System.out.println(factorial(n));
    }
    //Calculates the factorial of integer n
    public static int factorial(int n) {
        if (n == 0)
            return 1;
        else 
            return n*factorial(n-1);
    }
}

5 个答案:

答案 0 :(得分:6)

这取决于“计算一个列表”的确切含义,但这会打印相同的内容:

public static void main(String[] args) {
    factorial(10);
}
//Calculates the factorial of integer n
public static int factorial(int n) {
    if (n == 0)
        return 1;
    else {
        int newVal = n*factorial(n-1);
        System.out.println(newVal);
        return newVal;
    }
}

答案 1 :(得分:0)

我不知道你为什么不想使用循环,但这里有几个想法:

自行展开循环。

System.out.println(factorial(1));
System.out.println(factorial(2));
// ...
System.out.println(factorial(11));

制作另一个递归方法并从main调用它。

public static void factorials(int n)
{
    if (n >= 11) return;
    System.out.println(factorial(n));
    factorials(n + 1);
}

答案 2 :(得分:0)

实际上我想说你不能或更喜欢为什么会这样,但如果你真的想要,你可以这样做。

public class FactInt {
    public static void main(String[] args) {
        factorial(10);
    }
    //Calculates the factorial of integer n
    public static int factorial(int n) {
        final int calc;

        if (n == 0) { calc = 1; }
        else { calc = n * factorial(n - 1); }

        System.out.println(calc);

        return calc;
    }
}

答案 3 :(得分:0)

创建一个方法,例如getFactorial(int num),如下所示。在该方法中移动for循环并从main调用该方法。

 public static void main(String[] args) {
    int num = 11;
   getFactorial(num);
}

public static void getFactorial(int num){
    for (int n = 1; n < num; n++)
        System.out.println(factorial(n));
}
//Calculates the factorial of integer n
public static int factorial(int n) {
    if (n == 0)
        return 1;
    else 
        return n*factorial(n-1);
}

答案 4 :(得分:0)

再次使用递归!

public class FactInt {
    public static void main(String[] args) {

        factorialList(1, 10);
    }
    //Calculates the factorial of integer n
    public static int factorial(int n) {
        if (n == 0)
            return 1;
        else 
            return n*factorial(n-1);
    }

    public static void factorialList(int min, int max) {
        if (min != max)
            factorialList(min, max-1);
        System.out.println(factorial(max));
    }
}