java - 我应该写什么以避免 stackoverflow 错误?

标签 java stack-overflow

所以我目前正在通过递归函数研究斐波那契代码。

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/

相关文章:

java - phonegap 相机 API 在 android 上重新启动应用程序

java - 如何使用 JDBC 对数据库目录和模式进行分组?

javascript - Javascript 中的 while 与 setTimeout

c++ - 从 clr gui 实例化非托管类时引发的 Stackoverflow 异常

c - C 中的 Stackoverflow : too many recursive calls ?

java - 覆盖系统类的serialVersionUID

java - Shenandoah 垃圾收集器 - 重定向指针如何在应用程序更改对象状态之前收集两次的区域中工作?

java - 如何以原始顺序读取java中的属性文件

recursion - 如何实现 "stackless"解释型语言?

javascript - setTimeout 是使用回调时避免 stackoverflow 的有效方法吗?