所以我目前正在通过递归函数研究斐波那契代码。
package blatt4;
public class BigIntegerFibonacci
{
public static void main(String[] args)
{
int x;
System.out.println(fib_basic(5));
}
public static int fib_basic(int x)
{
if (x == 0)
{
return 1;
}
int i = fib_basic(x - 1 ) + fib_basic(x -2);
return i;
}
如果我这样做,我会得到一个 stackoverflow 错误,但是当我输入 if (x == 0 || x == 1); 时,我会得到一个 stackoverflow 错误。 return 1; 这段代码没问题,它显示了我想要的结果。有人可以解释一下为什么吗?我知道有一种方法可以不在递归函数中包含 x == 1 。但我真的不记得怎么写了。
最佳答案
因为这里
int i = fib_basic(x - 1 ) + fib_basic(x -2);
当x
为1时,您在第二次调用中将函数调用为fib_basic(-1)
,这样就无法阻止函数递归(因为x
从那时起将永远不会是 0)并且您进入无限循环。
关于java - 我应该写什么以避免 stackoverflow 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58841102/