java 1.6中未给出阶乘递归异常
为什么我在下面的代码中没有得到任何异常? 运行完这段代码后,我在test.fact(t.java:32)得到一个无限循环 未找到编译时错误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 {
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),它成功地执行了递归以显示错误的问题是什么???