簡體   English   中英

Java Stackoverflow錯誤遞歸

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM