1

我试图弄清楚为什么以下递归方法会出现堆栈溢出错误。该方法用于检查ArrayList类型床的可用性。它需要numOfBeds连续/一起找到可用的,然后返回第一个的位置,这样我就可以从列表中的那个位置开始连续预订指定的数量。给出的参数:pos= 起始位置,numOfBeds= 要查找的数量,bedList= 一个ArrayList。递归调用的起始点位于发现不可用床位之后。提前致谢!

    public int multiEmptyBeds(int pos, int numOfBeds, ArrayList<Bed> bedList)
    {
    int check = pos;
    int count = 0;

    if(pos >= bedList.size())
        return -1;
    while(count != numOfBeds)
        {
        if(bedList.get(check).ifAvailable())
            check++;
        else
            break;
        count++;
        }
    if(count == numOfBeds)
        return pos;
    return multiEmptyBeds(check++, numOfBeds, bedList);
    }

编辑:解决了!请参阅下面的解决方案/优化...

4

1 回答 1

3

您在递归调用语句中的问题:

return multiEmptyBeds(check++, numOfBeds, bedList);

运算符的后缀形式的语义++是这样的,它会改变变量的值check,只有在被调用的函数返回之后。

您必须使用前缀形式的增量运算符++

return multiEmptyBeds(++check, numOfBeds, bedList);
于 2013-10-26T21:35:01.143 回答