利用栈将递归转化为非递归

1)设置一个工作栈存放递归工作记录(包括实参、 返回地址及局部变量等)。
(2)进入非递归调用入口(即被调用程序开始处) 将调用程序传来的实在参数和返回地址入 栈(递归程序不可以作为主程序,因而可认为初始是被某个调用程序调用。
(3)进入递归调用入口:当不满足递归结束条件时,逐层递归,将实参、 返回地址及局部变 量入栈,这一过程可用循环语句来实现一模拟递归分解的过程。
(4)递归结束条件满足,将到达递归出口的给定常数作为当前的函数值。
(5)返回处理:在栈不空的情况下,反复退出栈顶记录,根据记录中的返回地址进行题意规 定的操作,即逐层计算当前函数值,直至栈空为止一模拟递归求值过程。
通过以上步骤,可将任何递归算法改写成非递归算法。但改写后的非递归算法和原来比较起 来,结构不够清晰,可读性差,有的还需要经过一系列的优化,这里不再举例详述,具体示例参 见5.5.1节中二叉树中序遍历的非递归算法。
自己思路:
1、设置栈顶和栈
2、循环条件一般有两个以上,其中一个栈顶
————————————————
版权声明:本文为CSDN博主「时间胶嚢」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42757083/article/details/104876229

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页