0

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

代码:

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);
    }
}
4

5 回答 5

7

这完全取决于“计算列表”的含义,但这会打印相同的内容:

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;
    }
}
于 2013-10-24T15:51:33.680 回答
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);
}
于 2013-10-24T15:52:32.980 回答
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;
    }
}
于 2013-10-24T15:52:38.867 回答
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);
}
于 2013-10-24T15:55:21.347 回答
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));
    }
}
于 2013-10-24T15:57:01.693 回答