有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    因为这里

    int i = fib_basic(x - 1 ) + fib_basic(x -2);
    

    x为1时,在第二次调用中以fib_basic(-1)的形式调用函数,这样就没有任何东西可以阻止函数递归(因为x从那时起将永远不会为0),然后进入无限循环