繁体   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