怎么将该递归算法改为非递归或者用栈来实现

如何将该递归算法改为非递归或者用栈来实现?
本帖最后由 oDiuDiu12345 于 2014-09-17 11:49:28 编辑
void TravelItem(HTREEITEM hStart)     
{
    if(hStart == NULL)
             return;
    if(isItemExpanded(hStart) )         //该节点是否展开
    {
        hStart = tree.GetChildItem(hStart);      //获取子节点
        while(hStart)  
      {   
        TravelItem(hStart);  
        hStart= GetNextSiblingItem(hStart);  //获取兄弟节点
    }   
    else
    {
       hStart = GetNextSiblingItem(hStart);
       TravelItem(hStart); 
    }
}  
------解决思路----------------------
将递归改为非递归不是很简单嘛? 创建一个堆栈容器,第一次调用的参数push进堆栈,递归代码外层加一个do...while()循环,判断条件就是堆栈是否为空。递归代码中的return改成pop(); continue; 递归调用的地方改成push(); continue;就行了。这么简单自己写就行了。
------解决思路----------------------
楼上的说法是对的,递归的本质就是栈,是将函数的参数以及函数的返回地址压入了栈。如果你自己建一个参数栈的话,可以省掉将函数的返回地址压入栈的开销,其他没有什么好处,你做的不会比系统本身做的更好。