栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > C/C++/C#

【南大操作系统课】如何将任意递归程序写为非递归形式

C/C++/C# 更新时间:发布时间: 百科书网 趣学号
C语言就是状态机

妙啊
BV12L4y1379V 16:57附近

递归形式的汉诺塔解法

非递归形式的汉诺塔解法

感想

所有递归程序都可以“就地”转为非递归,基本步骤为:

  1. 定义代表当前程序状态的frame,frame中包含PC(可以理解为调试的时候高亮的那行代码)
  2. 定义函数语句的行为(call,ret,goto等)
    call(f)相当于 push frame,frame.pc = f
    ret相当于pop frame
  3. 定义以frame为元素的stack
  4. 初始状态frame压栈
  5. 当栈中有frame时,根据pc的位置执行对应的操作,每次操作执行完,将pc指向下一条语句

如果遇到不同函数之间的调用,可以定义属于不同函数的frame或者添加case

转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/925458.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号