java - 堆栈溢出异常

标签 java exception stack-overflow

我在下面编写了代码。但是它会打印这个异常,我真的不知道它的问题是什么,请帮助我,谢谢

代码:

    private void fillMinAverageTime() {   //T(n) = O(n^3)
    for (int i = list.size() - 2; i >= 0; i--) {
        for (int j = i + 1; j < list.size(); j++) {
            for (k = i; k <= j; k++) {
                minOne = fillMinAverageTimeArray(i, j);
                if (min == 0.0) {
                    min = minOne;
                } else if (minOne < min) {
                    min = minOne;
                }
            }
            min = 0.0;
            minOne = 0.0;
            minAverageTimeArray[i][j] = min + probability[i][j];


        }

    }
}

private double fillMinAverageTimeArray(int i, int j) {
    if (i > j) {
        return 0.0;
    }
    if (i == j) {
        return minAverageTimeArray[i][i];
    }
   System.out.println(k+","+j+","+i);//EDITED

 **return (fillMinAverageTimeArray(i, k - 1) + fillMinAverageTimeArray(k + 1, j));**//the line tat throws this exception
}

异常:

at OBST.MemoizedVersion.fillMinAverageTimeArray(MemoizedVersion.java:118)
at OBST.MemoizedVersion.fillMinAverageTimeArray(MemoizedVersion.java:118)
at OBST.MemoizedVersion.fillMinAverageTimeArray(MemoizedVersion.java:118)

编辑:它将打印:

2,3,2
3,3,2
1,2,1
2,2,1
1,3,1
1,3,2
1,3,2
1,3,2
1,3,2
1,3,2
1,3,2
1,3,2
1,3,2
1,3,2
1,3,2
1,3,2
1,3,2
1,3,2
1,3,2

最佳答案

您写了一个recursive method 。您必须确保它将通过到达基本情况而终止,否则它可能会进入循环,直到发生堆栈溢出异常 - 这就是这里发生的情况。保证终止的最简单方法是始终确保每次调用都更接近基本情况。这里的基本情况是参数 ij在某些时候必须变得平等,因此您应该尝试在每一步中使它们至少彼此更接近。

这是给出问题的行:

return (fillMinAverageTimeArray(i, k - 1) + fillMinAverageTimeArray(k + 1, j));

这只是用相同的值重复调用您的方法。你确定你说的不是i + 1j - 1而不是k + 1k - 1

关于java - 堆栈溢出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4478395/

相关文章:

java - 如果另一个异常吃掉了它,我应该在顶部异常中保留对原始异常的引用吗?

android - TextWatcher afterTextChanged 导致 android 中的 stackoverflow

java - PhoneGap handle 后退按钮不关闭应用程序

java - 在 JSF2 中通过 AJAX 加载页面内容

java - 未找到媒体类型 = 应用程序/json 的 MessageBodyReader

java - 我可以使用 Jenkins 来测试虚拟机(服务器)是否已启动并正在运行吗?

java - Android:什么是 "Bad file number"SocketException?

c# - 我可以知道在 Visual Studio 2015 中调试期间执行的最后一条语句吗?

c - 临时数据如何存储在堆栈帧中

java - StackOverflowError 在 Java 中是什么意思?它的解决方法是什么?