0

为什么我在以下代码中没有收到任何异常?运行此代码后,我在 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); 

它成功执行递归显示错误有什么问题???

4

3 回答 3

3

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

      return fact(m-1) * m;
于 2012-10-07T15:49:40.833 回答
0

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

int fact(int m) throws Exception
{
    int f = 1;
    for (int i = 0; i < m; f *= ++i);
    return f;
}
于 2012-10-07T16:16:22.730 回答
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

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

于 2012-10-07T15:57:36.613 回答