use*_*221 0 java stack-overflow exception
我已经编写了下面的代码.但它会打印出这个异常,我真的不知道它的问题是什么,请帮助我谢谢
码:
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
}
Run Code Online (Sandbox Code Playgroud)
例外:
at OBST.MemoizedVersion.fillMinAverageTimeArray(MemoizedVersion.java:118)
at OBST.MemoizedVersion.fillMinAverageTimeArray(MemoizedVersion.java:118)
at OBST.MemoizedVersion.fillMinAverageTimeArray(MemoizedVersion.java:118)
Run Code Online (Sandbox Code Playgroud)
编辑:它将打印:
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
Run Code Online (Sandbox Code Playgroud)
你已经编写了一个递归方法.你必须确保它会通过到达基本情况来终止,否则它可能会进入一个循环,直到发生堆栈溢出异常 - 这就是这里发生的事情.保证终止的最简单方法是始终确保您在每次通话时更接近基本情况.你的基本情况是参数i和j某些点必须相等,所以你应该尝试在每一步都让它们至少彼此靠近一个.
这是给出问题的线:
return (fillMinAverageTimeArray(i, k - 1) + fillMinAverageTimeArray(k + 1, j));
Run Code Online (Sandbox Code Playgroud)
这只是重复调用具有相同值的方法.你确定你没有意思i + 1而j - 1不是k + 1和k - 1?
| 归档时间: |
|
| 查看次数: |
300 次 |
| 最近记录: |