递归调用示例
算法1.10 求取数组元素的最大值(递归算法)
procedure MAX1(i)
// 查找数组A中最大值元素,并返回该元素的最大下标。//
global integer n,A(1:n),j,k
integer i
if i<n then j←MAX1(i+1) //递归调用//
if A(i) > A(j) then k←i
else k←j
endif
else k←n
endif
return(k) //递归调用的返回//
end MAX1
消去上例中的递归
procedure MAX2(i)
local integer j,k; global integer n, A(1:n)
integer i
integer STACK(1:2*n)
top←0 //规则1,声明栈的代码,并初始化为空//
L1: if i<n //规则2,将标号L1赋于第一条可执行语句前//
then top ←top + 1; STACK(top)←i; // 规则3,参数或局部变量的值入栈//
top ←top +1; STACK(top)←2; // 规则4,建立新标号2,并入栈//
i ←i+1 // 规则5, 计算参数值//
goto L1 //规则6, 无条件转向算法的开始部分//
L2: j ←STACK(top); top ←top-1; // 规则7, 处理函数调用, 并将标号2赋于该语句上//
if A(i) > A(j) then k ←I
else k ←j
endif
else k ←n
endif
if top = 0 then return(k) // 规则8, 如果栈空,则正常返回//
else addr ←STACK(top);top ←top-1; // 规则10, 从 栈中退出返回标号//
i ←STACK(top);top ←top-1; // 规则11, 从栈中退出局部变量和参数的值//
top ←top+1;STACK(top) ←k; // 规则12, 计算返回值,并将之入栈//
if addr = 2 then goto L2 endif // 规则13, 用返回地址标号的下标实现对该标号的转向//
endif
end MAX2
原文地址:http://www.cnblogs.com/xiaowei-blog/p/3796043.html