递归代码无法正常工作

时间:2014-03-11 04:54:40

标签: java recursion

如果我删除评论代码工作正常,如果我评论上面评论的行我得到一个错误

package TEST;

class Fact {
    // this is a recursive method
    int fact(int n) {

        // if (n == 1)
        // return 1;
        int result = fact(n - 1) * n;
        return result;

    }

    public static void main(String args[]) {
        Fact f = new Fact();
        System.out.println("Factorial of 7 is " + f.fact(5));
        System.out.println("Factorial of 4 is " + f.fact(4));
        System.out.println("Factorial of 5 is " + f.fact(5));
    }
}

if i remove the comment the code is working fine and if i comment the above lines which are commentd i get an error

3 个答案:

答案 0 :(得分:1)

每个递归方法都必须有一个退出点,否则它会在无限循环中运行而不会永远停止。所以你的堆栈已满,你会收到Stackoverflow错误。有关详情,请参阅http://en.wikipedia.org/wiki/Recursion

退出点的一个很好的例子是Inception中的spinning top。如果是最高点,Cobb意识到世界是真实的,如果不是,他就是在梦中......

答案 1 :(得分:1)

编写递归程序有两个条件。 1.自称的方法 2.终止条件

当你发表评论时

// if (n == 1) // return 1;

您的代码不知道何时终止并进入无限循环因此错误。

答案 2 :(得分:0)

这是正确的递归方法:

int fact (int n)
{
    if (n <= 1) {
        return 1;
    }
    return n * fact (n - 1);
}

在您的代码中,您缺少基本情况,因此它永远不会停止重复该方法。