使用递归计算没有新变量的阶乘

时间:2016-05-05 16:33:17

标签: java recursion return

我试图通过使用递归来计算方法factorialRecursive中输入的factorial,但是我不能在该方法中声明任何变量或对象,这就是我正在努力的方法,我的尝试已经在方法中但是没有'工作。这必须在While循环中调用自身而不是for循环。

class Factorial{
  public static void main(String[] args){
    Scanner input = new Scanner(System.in);
    int number;
    do {
      System.out.print("Enter a positive number: ");
      number = input.nextInt();
    } while (number < 0);
    System.out.println(number + "! = " + factorialIterative(number) + " (iterative)");
    System.out.println(number + "! = " + factorialRecursive(number) + " (recursive)");
  }

  private static int factorialIterative(int num) {
    int result = 1;
    while (num > 0) {
        result = num*result;
        num--;
    }
    return result;
  }

  private static int factorialRecursive(int num){
     if (num==1 | num==0)
         return 1;
     return num*(num-1) * num;
  }
}

3 个答案:

答案 0 :(得分:2)

试试这个:

private static int factorialRecursive(int num) {
    // Warning here use || instead of |
    if (num==1 || num==0)
        return 1;
    return num * factorialRecursive(num - 1);
}

我也可以像这样简化:

private static int factorialRecursive(int num) {
    return (num == 1 || num == 0) ? 1 : num * factorialRecursive(num - 1);
}

答案 1 :(得分:1)

您不需要声明任何变量。利用阶乘的递归关系:

N! = n *(n - 1)!

通过传递num进行递归调用的结果乘以num - 1。返回该产品而不将其存储在变量中。

答案 2 :(得分:-1)

递归意味着您需要在方法

中调用方法本身

实施例

private static int factorialRecursive(int num){
     if (num==1 | num==0)
         return 1;
     return num*factorialRecursive(num-1);
  }

并且因为factorial将在低值时增加得非常高,考虑使用除整数之外的其他数据类型...否则只有在使用整数后才能获得无效数据的阶乘(16)...

private static long factorialRecursive(long num){
         if (num==1 | num==0)
             return 1;
         return num*factorialRecursive(num-1);
      }