[英]Java Stackoverflow Error Recursion
在一定的输入大小之前,我编写的这段代码非常有用。 如果输入太大,则会收到“ java.lang.StackOverflowError”。 我已经在stackoverflow上阅读了有关此主题的其他条目,并且我认为递归中有错误-但找不到。 这是代码:
public int partition(int[] A, int l, int r, int x){
int i = l-1;
int j = r;
int exchange;
while(i <= j){
while(A[i] > x){
i++;
}
while(j >= i && A[j] <= x){
j--;
}
if(i < j){
exchange = A[i];
A[i] = A[j];
A[j] = exchange;
}
}
if(A[i] < A[r]){
exchange = A[i];
A[i] = A[r];
A[r] = exchange;
}
return i;
}
public void quicksort(int[] A, int l, int r){
int pivot = 0;
int x = 0;
if(l < r){
x = A[r];
pivot = partition(A, l, r, x);
quicksort(A, l, pivot-1);
quicksort(A, pivot+1, r);
}
}
如果输入太大
您所说的“太大”到底是什么意思? 每个足够深的递归都可能导致堆栈溢出,因为堆栈用于在所有递归级别上保留递归方法的所有局部变量。
这是递归的固有缺点,也是迭代实现通常优于递归的原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.