java 1.6中未给出阶乘递归异常

java 1.6中未给出阶乘递归异常,java,exception,recursion,factorial,throws,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 {

为什么我在下面的代码中没有得到任何异常? 运行完这段代码后,我在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); 
它成功地执行了递归的问题是什么
要显示错误???

事实方法的返回值表达式中有错误。 应该是

      return fact(m-1) * m;

事实方法的返回值表达式中有错误。 应该是

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

fact(20)
返回

fact (380)
fact (379*380)
返回

fact (380)
fact (379*380)
哪个

它不会返回任何内容,并且会导致堆栈溢出(调用堆栈上使用了太多内存)

应该有用

我强烈建议您再次阅读基础知识和示例(例如-)

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

返回

fact(20)
返回

fact (380)
fact (379*380)
返回

fact (380)
fact (379*380)
哪个

它不会返回任何内容,并且会导致堆栈溢出(调用堆栈上使用了太多内存)

应该有用

我强烈建议您再次阅读基础知识和示例(例如-)


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

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

int-fact(int-m)引发异常
{
int f=1;
对于(int i=0;i
使用循环计算阶乘的另一种方法(无递归):

int-fact(int-m)引发异常
{
int f=1;
对于(int i=0;i
您没有看到StackOverflower错误?@HovercraftFullOfEels抱歉,这是离题,但我喜欢您的name@JakobBowyer我喜欢你的评论。另外,请注意StackOverflowerr是一个运行时异常。在编译时检测是不可能的,因为编译器不知道要传递什么整数。您可以在运行时从用户处获取输入,并将其传递给fact方法。这就是编译时不处理此类错误/异常的原因。从另一方面来说,任何扩展RunTimeException的错误或异常都不会由编译器处理。看一看:你没有看到StackOverflower错误?@HovercraftFullOfEels抱歉,这是离题,但我喜欢你的name@JakobBowyer我喜欢你的评论。另外,请注意StackOverflowerr是一个运行时异常。在编译时检测是不可能的,因为编译器不知道要传递什么整数。您可以在运行时从用户处获取输入,并将其传递给fact方法。这就是编译时不处理此类错误/异常的原因。从另一方面来说,任何扩展RunTimeException的错误或异常都不会由编译器处理。看一看:比如说我amd使用return(a+b),它成功地执行了递归以显示错误的问题是什么???比如说我amd使用return(a+b),它成功地执行了递归以显示错误的问题是什么???