你瑞哥 2013-09-04 03:10 采纳率: 0%
浏览 2145

递归调用循环的非递归形式

背景:之前在算法书上看到说所有的递归算法都可以写成非递归的形式。
那么遍历一个完全树的所有叶子节点,我看过两个算法,一个是递归调用,非常简单。
还有一个使用了队列:(c++ 和伪代码的混合表示)
queue.push(root);//根节点进队
while (!queue.isEmpty())
{
queue.push(root->left);
queue.push(root->right);
if (!queue.top()->hasChild())
{
print queue.top()->data;
}
queue.pop();
}

上面的算是非递归形式。

不过我想问的是,是不是说一定需要队列或者堆栈这样的辅助数据结构才能解决该问题?
因为我觉得之前的一些递归算法改成的非递归算法都没有用到什么数据结构。
比如合并排序的非递归形式。用到的仅仅是两个向量而已。
我一直认为递归算法改成非递归形式是有一定的模板可循的。如果辅助数据结构不可避免,是不是意味着所有的递归算法只是理论上可以写成递归形式,至于写不写的出来,还要看个人的数据结构水平?

  • 写回答

1条回答

  • Coursera 2014-12-05 00:55
    关注

    递归变成非递归,栈和队列是标准的支持数据结构,因为函数调用就是用堆栈实现的。

    评论

报告相同问题?

悬赏问题

  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况
  • ¥15 画两个图 python或R
  • ¥15 在线请求openmv与pixhawk 实现实时目标跟踪的具体通讯方法
  • ¥15 八路抢答器设计出现故障