使这个函数不递归?

时间:2011-01-13 03:36:18

标签: c++

我在这里有一个递归的函数,但我宁愿让它非递归。我只是不确定如何。

  void AguiWidgetManager::recursiveRender(const AguiWidget *root)
{
    //recursively calls itself to render widgets from back to front
    AguiWidget* nonConstRoot = (AguiWidget*)root;
    if(!nonConstRoot->isVisable())
    {
        return;
    }

        clip(nonConstRoot);

        nonConstRoot->paint(AguiPaintEventArgs(true,graphicsContext));

        for(std::vector<AguiWidget*>::const_iterator it = 
            root->getPrivateChildBeginIterator();
            it != root->getPrivateChildEndIterator(); ++it)
        {
            recursiveRender(*it);
        }
        for(std::vector<AguiWidget*>::const_iterator it = 
            root->getChildBeginIterator();
            it != root->getChildEndIterator(); ++it)
        {
            recursiveRender(*it);
        }

}

如果解决方案不能与迭代器一起工作,那就没关系。

由于

2 个答案:

答案 0 :(得分:6)

简单的方法就是维护自己的堆栈。 Psuedoish示例代码:

stack s;
while(!s.empty())
{
    root = s.pop();

    //your code here
    //replace each recursive call with s.push(it)
}

此外,抛弃常量是一个坏主意。如果你想修改它,它首先不应该是一个const参数。

答案 1 :(得分:1)

通常,您需要自己实现堆栈:

clear stack
push first item onto stack
while stack is not empty:
    pop top item off stack
    do action for item (clip, paint)
    push children onto stack (if any)