算法分析第三章.pptVIP

  • 3
  • 0
  • 约6.53千字
  • 约 39页
  • 2018-05-15 发布于河南
  • 举报
第 三 章 递 归 3.1 递归算法的实现机制 子程序调用的实现机制 为了保证递归调用的正确性,需要保存调用点的现场(返回地址、局部变量、被调用函数的参数等),以便正确地返回,并且按先进后出的原则来管理这些信息。 高级语言编译程序是利用栈来实现的。 f(n) f(n-1) f(n-2) f(1) f(0) 计算 4 ! 递归过程图示: 下图中 Pi 代表现场信息,栈元素由现场信息和参数构成 f(4)=4*f(3) f(3)=3*f(2) f(2)=2*f(1) f(1)=1*f(0) f(0)=1 Push(e4) Push(e3) Push(e2) Push(e1) f(4)= 4 * f(3) f(3) = 3 *f(2) f(2)= 2 *f(1) f(1)= 1 * f(0) =24 = 6 =2 =1 3.3 递归算法设计 可以用递归求解的问题应满足 问题的描述涉及规模 规模发生变化后,问题的性质不变 问题的解决有出口 递归算法的一般形式 Procedure P(参数表) if 递归出口 then 简单操作 else 简单操作;call P;简单操作 endif end P 几个典型问题 Hanoi问题 棋子的移动问题 简单的0/1背包问题 n个元素的全排列 自然数拆分(正整数拆分) n阶Hanoi问题 X,Y,Z是三个塔座,开始时有n个盘子依其半径大小套在柱子X上,其中半径大的在下面。现要将X上的圆盘移到Z上,并仍按同样顺序叠置。 移动规则: 1:每次只能移动1个圆盘; 2:任何时刻都不允许将半径大的圆盘压在半径小的圆盘之上; n阶Hanoi问题 Hanoi(n,X,Y,Z) n=1, X→Z n=2, X→Y, X→Z, Y→Z, n阶Hanoi问题 Hanoi(n,X,Y,Z) n=3, Hanoi(2,X,Z,Y) X→Z Hanoi(2,Y,X,Z) n阶Hanoi问题 procedure Hanoi(n, X, Y, Z) if (n ? 1) then move(X,Z) else Hanoi(n-1, X, Z, Y) move(a,c) Hanoi(n-1, Y, X, Z) endif End Hanoi 棋子的移动问题 有2n个棋子(n=4)排成一排,白子用0表示,黑子用1表示,例如n=5时初始状态为  0 0 0 0 0 1 1 1 1 1 _ _(后面至少有两个空位),要求通过棋子移动最终成为 0 1 0 1 0 1 0 1 0 1. 移动规则: 1.每次同时移动相邻两个棋子,颜色不限,移动方向不限, 2.每次移动必须跳过若干棋子, 3.不能调换两个棋子的位置。   棋子的移动问题 n=4时 0 0 0 0 1 1 1 1 _ _ 0 0 0 _ _ 1 1 1 0 1 0 0 0 1 0 1 1 _ _ 1 0 _ _ 1 0 1 1 0 0 1 0 1 0 1 0 1 _ _ 0 1 _ _ 0 1 0 1 0 1 0 1   棋子的移动问题 n=5时  0 0 0 0 0 1 1 1 1 1_ _ 0 0 0 0 _ _ 1 1 1 1 0 1 0 0 0 0 1 1 1 1 _ _ 0 1 n=6时  0 0 0 0 0 0 1 1 1 1 1 1_ _ 0 0 0 0 0 _ _ 1 1 1 1 1 0 1 0 0 0 0 0 1 1 1 1 1 _ _ 0 1   棋子的移动问题 递归出口:n=4   move (4,5) →(9,10) 0 0 0 _ _ 1 1 1 0 1 move (8,9) →(4,5) 0 0 0 1 0 1

文档评论(0)

1亿VIP精品文档

相关文档