我试图弄清楚为什么我会在以下递归方法中出现堆栈溢出错误。该方法用于检查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);
}
编辑:已解决!请参阅下面的解决方案/优化...
答案 0 :(得分:3)
你在recursive-call语句中的问题:
return multiEmptyBeds(check++, numOfBeds, bedList);
++
运算符的后缀形式的语义是这样的,它只会在被调用函数返回后才会更改变量check
的值。
您必须使用前缀形式增量运算符++
:
return multiEmptyBeds(++check, numOfBeds, bedList);