C语言就是状态机
妙啊
BV12L4y1379V 16:57附近
递归形式的汉诺塔解法
非递归形式的汉诺塔解法
感想
所有递归程序都可以“就地”转为非递归,基本步骤为:
- 定义代表当前程序状态的frame,frame中包含PC(可以理解为调试的时候高亮的那行代码)
- 定义函数语句的行为(call,ret,goto等)
call(f)相当于 push frame,frame.pc = f
ret相当于pop frame - 定义以frame为元素的stack
- 初始状态frame压栈
- 当栈中有frame时,根据pc的位置执行对应的操作,每次操作执行完,将pc指向下一条语句
如果遇到不同函数之间的调用,可以定义属于不同函数的frame或者添加case