正在加载图片...
运行 Input a=21 N=4,B=16 Input a=-156 N=8,B=938 以上两过程即是间接递归调用,可将其合为如下的直接递归调用过程。 Procedure P2(Var d: integer) Var y: integer; if x<400 then Begin n:=n+1 =x;y:=y*2+10:可优化成y:=x*2+10 P2(y) 还可进一步优化成 Procedure P2(Var d: integer) begin begin n: =n+1: x: =x*2+10: b: =x Div 30: P2(x); end 四、递归与循环可以相互转换,见P89。 ①尾部递归 五、顺序搜索的递归和非递归算法,见P89.自学②函数 六、递归问题(略讲) 第二节栈 栈是改写递归算法和理解递归算法的工具。理解实例可介绍《数据结构》教材中河内塔 部分补充页码! 、尾递归及其非递归化(见P93) 变成非递归时可不用栈 1.定义 2.方法 、非尾递归的非递归化 要用栈这种数据结构来实现,每一个需保存的变量设置一个栈。局部变量、值参量和返 回点都需栈,但全局变量和变参不要栈 1.关键点——递归过程的开始点、结束点和返回点 2.以非尾递归算法 Tower的非递归化为例说明一般步骤和方法。见P95-P97运行: Input a=21 N=4,B=16 Input a=-156 N=8,B=938 以上两过程即是间接递归调用,可将其合为如下的直接递归调用过程。 Procedure P2(Var d:integer); Var y:integer; Begin if x<400 then Begin n:=n+1; y:=x;y:=y*2+10; 可优化成 y:=x*2+10; b:=y Div 30; P2(y) End End; 还可进一步优化成: Procedure P2(Var d:integer); begin if x<400 then begin n:=n+1;x:=x*2+10;b:=x Div 30;P2(x);end end; 四、递归与循环可以相互转换,见 P89。 ①尾部递归 五、顺序搜索的递归和非递归算法,见 P89。 ②函数 六、递归问题(略讲) 第二节 栈 栈是改写递归算法和理解递归算法的工具。理解实例可介绍《数据结构》教材中河内塔 部分补充页码! 一、尾递归及其非递归化(见 P93) 变成非递归时可不用栈。 1.定义 2.方法 二、非尾递归的非递归化 要用栈这种数据结构来实现,每一个需保存的变量设置一个栈。局部变量、值参量和返 回点都需栈,但全局变量和变参不要栈。 1.关键点——递归过程的开始点、结束点和返回点。 2.以非尾递归算法 Tower 的非递归化为例说明一般步骤和方法。见 P95-P97 自学
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有