递归Java方法给出堆栈溢出错误

时间:2013-10-26 21:13:27

标签: java recursion arraylist

我试图弄清楚为什么我会在以下递归方法中出现堆栈溢出错误。该方法用于检查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);
    }

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

1 个答案:

答案 0 :(得分:3)

你在recursive-call语句中的问题:

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

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

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

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