Java堆栈溢出错误递归
我写的这段代码在输入到一定大小之前都非常有效。如果输入太大,我会得到一个“java.lang.StackOverflowerError”。我已经阅读了有关stackoverflow的其他一些条目,我认为我的递归中有一个错误,但我找不到它。 代码如下:Java堆栈溢出错误递归,java,recursion,stack-overflow,Java,Recursion,Stack Overflow,我写的这段代码在输入到一定大小之前都非常有效。如果输入太大,我会得到一个“java.lang.StackOverflowerError”。我已经阅读了有关stackoverflow的其他一些条目,我认为我的递归中有一个错误,但我找不到它。 代码如下: public int partition(int[] A, int l, int r, int x){ int i = l-1; int j = r; int exchange; while(i <= j)
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);
}
}
公共int分区(int[]A,int-l,int-r,int-x){
int i=l-1;
int j=r;
国际交换;
while(i x){
i++;
}
而(j>=i&&A[j]
如果输入太大
你说的“太大”到底是什么意思?
每个足够深的递归都可能导致堆栈溢出,因为堆栈用于将递归方法的所有局部变量保持在所有递归级别上
这是递归固有的缺点,也是迭代实现通常优于递归的原因。要获得堆栈溢出,输入必须有多大?您是否就是发布此问题的那个人:…您不应该尝试自己做作业吗?当您在调试器中逐步检查代码时,您会看到什么?如果是的话您的代码中有一个bug,您应该首先尝试调试程序。java.lang.StackOverflowerError
出现在内存“堆栈”中分配太多的地方,因此可能在某个地方有一个无限循环。@mrhobo它们看起来不一样……这只是java 101学期的那一周:)嗯…100个元素都在工作。从大约1000个开始,它就不再工作了,但我想处理大约1000k个元素。所以你建议试试迭代的方法?