如何解决使用递归方法时,try-catch陷入无限循环
所以我对Java很陌生,我不知道这是怎么发生的,但是当我由于堆栈溢出而导致程序崩溃时,我的catch方法似乎捕获了它,但陷入了无限循环,不知道为什么或如何解决。有人可以帮我吗?我真的很感激。
private static int Fibonacci(int n)
{
int fibVal = 0;
try
{
if (n == 0)
{
fibVal = 0;
}
else if (n == 1)
{
fibVal = 1;
}
else
{
fibVal = Fibonacci(n - 1) + Fibonacci(n - 2);
}
}
catch (StackOverflowError e)
{
System.out.println("This was another stack overflow,probably too high an input");
}
解决方法
完全摆脱您的try / catch块。您不应该发现错误。
Differences between Exception and Error
斐波那契的递归解决方案效率很低。您将遇到StackOverflowError
,其中包含非常小的数字,例如100。这仅仅是解决方案的局限性。您必须使用其他方法来实现它,您可以在网上找到它们。
尝试一下。同意George的意见,不要对Fibonacci使用递归。修改了一下代码。
public class Demo{
private static int Fibonacci(int n)
{
if (n == 0)
{
return 0;
}
else if (n == 1)
{
return 1;
}
else
{
return (Fibonacci(n - 1) + Fibonacci(n - 2));
}
}
public static void main(String []args){
int result = Fibonacci(8);
System.out.println(result);
}
}
,
好吧,当您捕获到异常时,您应该返回一个值,该值指示Fibonacci调用失败(示例-1)。然后,您应该更改代码以验证Fibonacci函数调用的结果以确保一切正常,然后添加它们。那应该照顾无限循环。否则,由于您正在捕获异常,因此递归调用将不断发生并引发异常。
也就是说,由于这似乎是一项家庭作业,因此只需完成任务即可,而不必担心捕获Stackoverflow异常。此外,您可以使用-Xssn标志来增加分配给VM的堆栈数量。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。