具有预增量的递归中的Java堆栈溢出

时间:2015-01-11 06:32:13

标签: java recursion

好吧,我已经制作了一个程序,可以通过递归找到数字的阶乘。它工作正常,但增加有问题。看,如果我写这样的程序,它确实有效! -

package programming.tutorialnext;

import java.util.Scanner;

public class Factorial_Recursion {

    public static int factorial(int n) {
        if (n == 1) {
            return n;
        } else {
            return n * factorial(n--);
        }
    }

    public static void main(String[] args) {
        Scanner bucky = new Scanner(System.in);

        int n;
        System.out.print("Enter a number for it's factorial :");
        n = bucky.nextInt();

        System.out.print("This is it's factorial : " + factorial(n));

    }
}

它说由于某种原因,即使没有,Stack也会溢出。 = 3! 但是,如果我像这样使用预增量器: - 在顶部,它工作正常!

2 个答案:

答案 0 :(得分:6)

当然它不起作用。 factorial(n--)factorial(n)具有相同的效果,因为它在递减之前将值传递给递归调用,并且永远不会使用递减的值,从而导致无限递归或至少直到堆栈溢出。

另一方面,当你使用预增量时,递归调用得到n-1,并且递归有效。

答案 1 :(得分:0)

进行这些更改以避免堆栈溢出。

  public static int factorial(int n) {
   int result;
   if (n == 1)
        return 1;
       result = factorial(n-1)*n
       return result }