您的位置:首页 > 其它

递归函数的栈表达

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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: