gpt4 book ai didi

java - 如何解决这个java方法中的stackoverflow异常?

转载 作者:行者123 更新时间:2023-12-02 00:47:34 26 4
gpt4 key购买 nike

Possible Duplicate:
Stack overflows from deep recursion in Java?

我为我的作业编写了以下分而治之的方法:

calculateC(cMatrix, cMatrix.length - 1, cMatrix.length - 1, w);
for(int i = cMatrix.length - 2 ;i>=0; i--)
calculateC(cMatrix, i, i+1, w);

private static double calculateC(double[][] matrix,
int i,
int j,
double[][] w){
o++;
double x1 = 0;
double x2 = 0;
double result = 0;
if(i > j) result = 0;
if(i == j){
matrix[i][j] = w[i][j];
result = w[i][j];

}

else if(i <= j){

for(int k = i; k <= j; k++){

if(i > k - 1)
x1 = 0;
else if(i <= k - 1){

if(matrix[i][k - 1] != 0){
x1 = matrix[i][k - 1];
} else{
x1 = calculateC(matrix, i, k - 1, w);

}
}
if(k + 1 > j)
x2 = 0;
else if(k + 1 <= j){

if(matrix[k + 1][j] != 0){
x2 = matrix[k + 1][j];

} else{
x2 = calculateC(matrix, k + 1, j, w);
}
}

cs.add(x1 + x2);
ks.add(k);
}
addMin(matrix, i, j, cs, ks, w);
}

if(j >= 0 && i >= 0 && j < matrix.length - 1){

calculateC(matrix, i, j + 1, w);
}

return result;

}

此方法适用于 nn 矩阵,但对于 n>=10 的矩阵,它会导致 java.lang.StackOverflowError看来是因为这个方法中的函数调用。我对每个有 n 行和 n 列的矩阵进行测试,递归方法被调用 n 次。是异常(exception)的原因吗?我该如何解决?我已经用迭代编写了上面的方法,它工作正常,但我也应该用分而治之的方法来编写这个方法,我很努力,但我不知道如何解决问题。

最佳答案

或者:

  1. 增加虚拟机的堆栈大小

  2. 重写您的代码,以便减少递归调用。它看起来不像是在做一些真正需要在矩阵的每个单元上递归而不仅仅是在大小为 NxN 到 1x1 的矩阵上递归的事情?

  3. 完全消除递归。您可以使用循环和您自己的堆栈管理重写任何递归函数。

关于java - 如何解决这个java方法中的stackoverflow异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4511354/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com