簡體   English   中英

StackOverFlow錯誤遞歸

[英]StackOverFlow error recursion

已經設置了一個任務,以在自定義哈希表中使用遞歸方法來查找數組中用於存儲鍵和值的下一個可用位置。

從startPos(鍵的哈希值)開始,並每次增加stepNo來跟蹤該位置(如果已被占用),我有一種方法可以根據探測器的類型/步驟數來查找下一個位置到目前為止。 由於某種原因,我遇到了溢出錯誤。

private int findEmpty(int startPos, String key, int stepNum) {
        if(arr[startPos] == null)
            return startPos;

        int next = getNextLocation(startPos, stepNum++, key);
        findEmpty( next ,key, stepNum);

        return startPos;
    }

下面的方法根據其探針類型查找下一個要檢查的位置,它采用startPos(鍵的哈希值),stepNo(在散列后跟蹤步驟)和鍵本身。

private int getNextLocation(int startPos, int stepNum, String key) {
        int step = startPos;
        switch (probeType) {
        case LINEAR_PROBE:
            step++;
            break; 
        case DOUBLE_HASH:
            step += doubleHash(key);
            break;
        case QUADRATIC_PROBE:
            step += stepNum * stepNum;
            break;
        default:
            break;
        }
        return step % max;
    }

謝謝任何建議或批評。

如果整個數組的arr[startPos] != null(即,數組已滿),則遞歸將永遠不會結束。

此外,您對遞歸all- findEmpty( next ,key, stepNum)返回的值不執行任何操作。 我假設您要返回它,而不是總是返回startPos

您可能要進行此更改:

private int findEmpty(int startPos, String key, int stepNum) 
{
    if(arr[startPos] == null)
        return startPos;

    int next = getNextLocation(startPos, stepNum++, key);
    return findEmpty( next ,key, stepNum);
}

另外,您必須有一種方法來檢測數組何時已滿,在這種情況下,您應該調整其大小或引發異常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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