无限递归C ++

时间:2012-03-25 15:08:48

标签: c++ recursion

我正在编写这个代码,一个函数递归调用它自己。但是我被困在一个无限循环中,因为它似乎在函数返回时它没有返回到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;
}

3 个答案:

答案 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循环中插入某种计数器。