为什么我在以下代码中没有收到任何异常? 运行此代码后,我在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);
它成功执行了递归的问题 显示错误???
答案 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;
}