因子递归在java 1.6中没有给出异常

时间:2012-10-07 15:46:38

标签: java exception recursion factorial throws

为什么我在以下代码中没有收到任何异常? 运行此代码后,我在test.fact(t.java:32)中提到了一个无限循环  没有找到编译时错误。

class test
{

    int fact(int m) throws Exception
    {
        if (m==1)
        {
        return 1;
        }
    else
        return (fact ((m-1)*m));
    }
}

class main
{
    public static void main(String ar[]) throws Exception
    {
        test t = new test();
        System.out.println(t.fact(5));
    }
}

虽然例如我正在使用

return(a+b); 

它成功执行了递归的问题 显示错误???

3 个答案:

答案 0 :(得分:3)

您在fact方法的返回值表达式中有错误。 它应该是

      return fact(m-1) * m;

答案 1 :(得分:0)

      return (fact ((m-1)*m));

返回

fact(20)

返回

fact (380)

返回

fact (379*380)

......

永远不会返回任何内容并且应该使堆栈溢出(在调用堆栈上使用了太多的内存)。

           return fact(m-1) * m;

应该有用。

我强烈建议您再次阅读基础知识和示例(此处,例如 - http://www.toves.org/books/java/ch18-recurex/index.html

尝试编写递归树yoursels,以了解会发生什么。

答案 2 :(得分:0)

另一种计算阶乘使用周期的方法(没有递归):

int fact(int m) throws Exception
{
    int f = 1;
    for (int i = 0; i < m; f *= ++i);
    return f;
}