递归函数的栈表达
2015-10-13 21:08
197 查看
递归函数的表达形式
void recursive(m) r(m); if m in A: p(m); recursive(L(m)); q(m);recursive(R(m)); s(m); else: ret(m);
分两类操作
1.cws 表示当前工作栈的参数m 如果cws满足in A 将能添加的左子结点全部添加入栈中,之后将尾部的不符合in A的执行 pop掉之后再加入该节点的父节点的右节点 最终cws一定是右节点
2.不满足in A的cws一定不能再递归(不然在while中会继续循环)此时只需要执行r(cws);ret(cws);后就可pop掉 此时执行的栈就是R(st.top())=cws的st.top()了 之后再继续执行右节点是pop掉的栈的所有栈即可
stack st; st.push(root); cws=root; while(!st.empty()): if(cws in A): while(cws in A): r(cws); p(cws); cws=L(cws); st.push(cws); r(cws); ret(cws); st.pop(); if(!st.empty()): cws=st.top(); q(cws); cws=R(cws); st.push(cws); else: r(cws); ret(cws); st.pop(); if(!st.empty()): while(cws==R(st.top())): cws=st.top(); s(cws); st.pop(); if(st.empty()): break; if(!st.empty()): cws=st.top(); q(cws); cws=R(cws);st.push(cws);
相关文章推荐
- 操作系统之死锁
- 如何用jar命令将Java打包成jar文件详解
- 服务器的数据调取
- Linux Mint中安装Vim补全神器——YouCompleteMe的最简单的方法
- Convolutional Neural Networks for Sentence Classification笔记整理
- ojdbc5.jar
- pat1045Favorite Color Stripe (30)
- 从源码安装gmond,gmetad,gweb
- 搜索引擎关键词抓取 以百度为例 python
- 杭电acm--1049
- BZOJ 1823 JSOI 2010 盛宴 2-SAT
- struts2封装请求参数
- 项目进度管理和项目成本管理作业
- Cocos2D v2.0至v3.x简洁转换指南(三)
- 获取进程信息-C++
- Cocos2D v2.0至v3.x简洁转换指南(三)
- Cocos2D v2.0至v3.x简洁转换指南(三)
- UI29_UIAlertAction(UIAlertView和UIActionSheet的结合体)
- 计算机的性能评价一
- hdu(1222狼和兔子)