递归算法的非递归化实现
- 格式:pdf
- 大小:140.01 KB
- 文档页数:4
摘 要 :由递 归 算 法 直接 转 换 成 相 应 的 非 递 归 算 法 能 有 效 地提 高程 序 的执 行 效 率 . 文 列 出 了 几类 递 归 算 法 的 非 递 归 本
承 , 士研 究 生 . 博 主要 研 究 信 息 系统 , 策 支 决
维普资讯
58 6
f : 1 f = 1; : 3; l 一 ; 2: i一 whi < = n d l i e o bgn e i
小
型
微
型
计
算
机
系
统
20 0 3年
rt ihm ,il t a e her f a ur s a a pls,a lo p ovd h ore on ng no r c sve ago ihm s lus r t s t i e t e nd ex m e d n as r iest e c r sp di n- e ur i l rt . K e wo d r c sve;a g ihm ;r c sv unc i y r s:e ur i l ort e ur ie f ton;r c s v o e e ur i e pr c dur e;non - e ur v r c sie
Ab t a t: s r c Non~ec s v l ih erv d by c nv r i e ur i e ago ihm a mpr e c m put ton e fce y sg f~ r ur i e agort m d i e o e tng r c sv l rt c ni ov o a i fiinc ini i
e d; n rsl 一f e u t: e d n e d; n
为l O W=lhg , , i=h 循环进行 白 条件是未 找到且 lw, { 『 o ~=hg i.
于是可得到如下的非递归函数 :
f nc i n bir h( ; s c u to s c r o r h;k: y y e , i t g r i t g r ke t p ;l h;n e e ):n e e ;
查 找 范 围逐 次 缩 小 . 至 查 找 成 功 或 当 l h时 查 找 失 败 为 直 >
止 . 此 可 对 参 数 lh设 置 一 个 循 环 , 循 环 控 制 变 量 的 初 值 因 , 使
f 一 f + f f : f f = f; : i 1 : l 2; l 一 2; 2: i: +
N o — e u s V m plm e a i n o c sv l o ih n r c r ie I e nt to f Re ur i e A g r t m
Z HU Z e ~ u n,ZHU C e g h ny a hn ( p rm n f C m ue c n ea d Teh oo y, I g l Um ) s y, h n sa 4 0 0 , h n ) De a t e t o p trS i c n c n lg C mn s o e m ~ ri C a g h 1 0 8 C ia e t
e d; n i f u d t e e u t 一 m i le r s t : 0 f o n h n r s l; d e s e ul :
在 实现 中使 用 一 个 数 组 f [. n 保 存 递 推 的 结 果 . 应 u 1.] 相
的程 序 段 如 下 :
wh l i k< 一 n d e o
e d; n
4 自顶 向下的递 推
有 一 类 递 归 问 题 . 如 Hao 塔 问 题 , 叉 树 遍 历 问 题 例 ni 二 等 , 基 本 项 可 由 一 些 基 本 信 息 来 表 示 , 归 纳 项 则 由一 列 递 其 而 归 调 用 和 基 本 项 信 息 所 组 成 . 类 问 题 可 以通 过 自顶 向 下 的 这
化 实现 方 法 . 别说 明 了这 几 类 递 归 算 法 的 特 点 及 算 法 实例 , 给 出 了相 应 的 非 递 归算 法 . 分 并
关 键 词 : 归 ;算 法 ; 归 函数 ;递 归 过 程 ; 递 归 化 递 递 非
中 圈分 类 号 : P3 l T O 文献标识码 : A 文 章 编 号 :0 0 1 2 ( 0 3 0 ~ 5 7 0 1 0 —2 0 20 )30 6 ~4
W h l ( 1 w< 一 hi a ( o o n )do i e (o g) nd n tf u d)
e i B gn
mi = (o d; 1 w+ h g)di i v 2;
i k= r mi . e h n f u d: tu f ~ d3 k y te o n ~ r e es fk< rm i . e h nhi 一 mi— le lw : m i+ 1 lei ~ d3 k y t e g: d les o = d
了相 应 的 非 递 归算 法 .
的算 法 就 会 使 用 递 归 的过 程 .
递 归 过 程 适 应 于 这 样 一 类 问题 : 对 这 一 类 问题 求 解 的 在 过 程 中 得 到 的 是 和 原 问 题 性 质 相 同 的 子 问题 , 一 类 问 题 自 这 然可以用一个递归 过程进行描 述 . 而且 也 非 常 符 合 人 们 的 思
ห้องสมุดไป่ตู้
1 引 言
在程 序设 计 中 , 归 过 程 的 使 用 相 当普 遍 . 递 因为 许 多 概 念
的定 义是 递 归 的 , 递 归 的 定 义 必 然 有 递 归 的 算 法 . 有 递 归 有 而
归调用的下一个语句继续执行.
上 述 对 递 归 程 序 的 模 拟 执 行 过 程 具 有 一 般 性 . 适 应 于 可 所 有 的递 归 过 程 . 使 用 这 种 模 拟 的 方 法 生 成 的 非递 归 程 序 但 结 构 不 太 清 晰 , 序 中要 使 用 很 多 标 号 和 转 向 语 句 . 且 执 行 程 而 效 率 也 未 必 有 较 大 的提 高 . 本 文 列 出 了几 类 递 归算 法 直 接转 换成 非 递 归 算 法 的 实 现 方 法 . 别 说 明 了这 几 类 递 归 算 法 的 特 点 及 算 法 实 例 并 给 出 分
例 1 数列定义如下 : .f
f1 一 f2 =1 () ()
f n = f n 1 + fn 2 ( > 2) () ( 一) (- ) n
采 用 自底 向上 的 递 推 得 到 如 下 的 非 递 归 函数
f c i n f n): t g r un to ( i e e; n
维普资讯
第2卷 第 3 4 期
20 0 3年 3月
小 型 微 型 计 算 机 系 统
MI I M I N — CR0 SYSTEM S
Vo1 24 N o.3 .
M a . 003 r2
递 归 算 法 的非 递 归化 实 现
朱 振 元 朱 承
v r l w , i mi i t ge ;f un b o e n; a o h g, d:n e r o d: o l a
e i b gn
在 上述 问 题 中未 知项 与 已知 项 的 位 置 间隔 是 固 定 的 . 如
lw : 1 o 一 ;hi = h;f u d: f le g: o n = as
维 习惯 .
对 这 一 类 问 题 设 计 递 归 算 法 时 , 常 可 以 先 写 出 问 题 求 通
2 自底 向上的 递推
有 一 类递 归 函数 . 函数 值 与 其 项 数 有关 . 果 形 成 一 个 其 结 数 列 . 于这 些 递 归 函数 可 以使 用 递 推 的 算 法 进 行处 理 . 对
果 不 固定 则 可使 用 一 个 数 组 保 存 逐 项 递 推 的 结 果 .
例 2 u数 列 定 义 如 下 : .f
f O)一 1 u( f 1 u( )一 2 f n): f u( u(n Dl 2) * f V u(n DI 4 )( > 一 2 V n )
态到终结状态的转化.
开 始 依 次 求 出数 列 中的 每 一项 . 递 归 调 用 的 执 行 过 程则 包 而
括 由 顶 向下 地 递 归 调 用 及 自底 向 上 地 递 归 返 回 两 个 过 程 , 因 此这 种递 推 的算 法 是 比较 直 接 的 .
递 归 过 程 的 特 点 是 结 构 清 晰 , 序 简 练 易 读 , 正 确 性 也 程 其 容易证明 . 因此 是 程 序 设 计 的有 力 工 具 . 由于 递 归过 程 的 执 但 行效率较 低 , 因此 对 程 序 中频 繁 执 行 的部 分 往 往 不 宜 使 用 递 归 过 程 . 且 有 些 程 序 设 计 语 言 是 不 容 许 递 归 调 用 的 . 这些 而 在 场合都要求将递归过程向非递归化转换. 将递 归 过 程转 换 成 非递 归过 程 可 通过 模 拟 递归 过 程 的 执 行过 程来 实 现 . 基 本 思 想 是 在 程 序 中设 置 一 个 栈 , 于 存 放 其 用 各 层 递 归 调 用 中参 数 , 部 量 , 回地 址 , 局 返 函数 值 等 信 息 . 当递 归 调 用 时 当 前 层 的信 息 进 栈 并转 向 递 归 入 口 . 当递 归 返 回时 相 应 的信 息 从 栈 中 弹 出 . 按 弹 出信 息 中的 返 回 地址 转 向递 并
c n l .Th s p p re u r t s s v r li lme t to t o s t o v r e u sv l o i m n o n n r c r ie a g ~ a ty i a e n me a e e e a mp e n a i n me h d o c n e tr c r ie a g rt h i t o - e u sv l o