我正在编写这个代码,一个函数递归调用它自己。但是我被困在一个无限循环中,因为它似乎在函数返回时它没有返回到while循环的结束括号但它返回到int o定义的地方..任何想法可能出现在哪里?< / p>
ErrorCode QuadTree::PartialSearchHelper(Key *key, const uint64_t QInternal, Iterator ** records,int l[], int pow) {
try {
uint64_t temp=(&indexVec[QInternal])->Firstchild;
uint64_t ch = (&indexVec[QInternal])->Firstchild;
for (int i = 0; i < pow; i++) {
while (!(&indexVec[temp + l[i]])->isLeaf) {
int o= l[i]; //it returns here after finishing recursion call!!!!!!!!!
PartialSearchHelper(key, temp + l[i], records, l, pow);
}
((&indexVec[temp + l[i]]))->findPartial(key, records);
}
} catch (std::bad_alloc &e) {
throw (kErrorOutOfMemory);
} catch (ErrorCode &e) {
throw (e);
} catch (...) {
throw (kErrorGenericFailure);
}
return kOk;
}
答案 0 :(得分:8)
你没有改变while内的任何值,所以它只是重启while,在较低级别的调用中
答案 1 :(得分:2)
每个递归函数调用都返回到它被调用的位置。由于你处于while循环中,你显然会继续下一次迭代。
答案 2 :(得分:2)
在while循环中没有计数器,没有任何值的变化。例如,让我们举一个非常基本的例子:
int i = 0;
while(i<5)
{
do.Something();
}
此时,“i”将始终小于5,因此它永远不会停止。另一方面,如果你把它改成这样的东西:
int i = 0;
while(i<5)
{
do.Something();
i=i++
}
每次运行时,i值都会增加1。如果while循环在for循环中,则需要完全完成while循环以循环回for循环。尝试在for循环中使用for循环或在while循环中插入某种计数器。