Java堆栈溢出错误递归

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)

我写的这段代码在输入到一定大小之前都非常有效。如果输入太大,我会得到一个“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){
        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个元素。所以你建议试试迭代的方法?