java我应该写些什么来避免堆栈溢出错误?
因此,我目前正在通过递归函数研究斐波那契代码
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);返回1这段代码没问题,它显示了我想要的结果。有人能解释一下原因吗?我知道有一种方法可以在递归函数中不包含x==1。但我真的不记得怎么写了
# 1 楼答案
因为这里
当
x
为1时,在第二次调用中以fib_basic(-1)
的形式调用函数,这样就没有任何东西可以阻止函数递归(因为x
从那时起将永远不会为0),然后进入无限循环