递归算法在程序设计中的应用分析

合集下载

递归算法的应用与分析

递归算法的应用与分析

化的执行效率。
关键词:递归;算法;非递归化;效率
中图分类号:TP301.6
文献标识码:A
文章编号:2096-4706(2020)20-0146-04
Application and Analysis of Recursive Algorithm
NI Jinyuan,ZHANG Jianxun (College of Computer Science and Engineering,Chongqing University of Technology,Chongqing 400054,China)
146 2020.10
倪锦园,等:递归算法的应用与分析
第 20 期
为了下一次迭代递归的输入。
1.2.2 递归算法的边界条件 边界条件就是递归的出口。递归算法不是无穷无尽的, 当程序递归到最后一层时,就要返回输出。由于每一层递归 都会使问题规模不断缩小,所以每一次递归都会越来越趋近 于终止条件,直到达到终止的条件,返回临界值。例如递归 求阶乘问题 f(n)=n•f(n-1),递归的终止条件当 n=1 时, 如果没有递归的边界条件,此时程序是无限循环的,没有输 出结果。递归算法的边界条件有的时候也不止一个,在整数 划分问题里面,要分别讨论最大化分数值和被划分的整数值 大小关系,此时递归边界条件也有多个的。
Abstract:Recursive thought is one of the most important thoughts in algorithm analysis and design. Recursive algorithms are widely used. With the help of recursive algorithms,some more complex problems can be expressed concisely. This article focuses on the concept and three characteristics of the recursive algorithm. This paper describes the application of recursive algorithm in data structure tree in detail through computer game tree,systematically introduces the application of recursive algorithm in graph by using different situations in the process of point chess game,and analyzes the execution efficiency of recursive algorithm and recursive algorithm non recursive through contrast experiments.

递归算法在程序设计中的应用分析

递归算法在程序设计中的应用分析

递 归严 格 说 来 并 不 是 一 种 具 体 的 算 法
递归的本 质在于在 调用的过 程 中, 问
量 都 可 以 作 为 参数 , 参数 的 选 择 具 备 一 定
实 例 : 于 一个 整 数 1的划 分 , 是 把 1 对 " 1 就 " 1
策略 , 指 函数 / 程 / 是 过 子程 序 在 运行 过程 题 的规 模 会 缩 小 , 用 递 归得 到 的 相 应 的 的技 巧 。 使 可 中直 接 或 间 接 调 用 自身 的 行 为 。 归 是 计 子 问题 更 容 易 解 决 , 以 用 递 归 方 程 来 表 递 归思 想 的算 法 被 称 为 递 归算 法 。 归 的 方 度 , 递 问题 就 可 以直 接 解 决 , 为 边 界 条 件 。 称 写程 序 能 使 程 序 变 得 简 洁 和 清 晰 。 是 用 但 递 归方 式 所 描 述 的 算 法 , 生 一 方 面 对 于 学
则 在 程 序 设 计 与 分析 中 , 归 技 术 是 十 以 及 递 归 方 程 , 问 题 很 容 易 解 决 。 递 2 1递归 类型 的分类 .
按 照 所 应 用 类 型 的 不 同 , 归 算 法 可 里 如 果 确 定 了 一 个 数 , 问题 的 规 模 自然 递 则
缩 小 。 时考 虑 添 加 参 数 I , 示 参 与 划 分 这 n表 的 最 大 数 , ( , ) 我 们惊 奇 的 发现 , 要 qn i 。 n 只 ( ) 于 归纳 的 递 归算 法 。 1基
执 行 的 步 骤 及过 程 , 一 方 面 需 要 自己 编 另 写程序时更是没有头绪 。
2 递归的计 算思维方式
递 归 算 法 设 计 的 关 键 在 于 如 何 设 定 代

例析程序设计中的递归算法

例析程序设计中的递归算法
m i( an )
}t ; i nn
fo ty; l a
pit “n u n it e u b r” ; r f ip t e r m e : ) n( a ng n saf “ ” &n ; cn( %d , ) Y= a ( ) fc n ;
pi f “ d =%fn , ,) } rt % ! n( \” nY ;
! = 1 2 = 1 1 =1 01 3X 2 2X1 1 1 X 已知
! =1
结果+ — _

已知

显而易见 , 如果要求递 归过程 不是无 限制进 行下去 , 必须 具有一 个结束递 归过 程 的条 件. 例 中的 此 0 =, 1就是使递归结束的条件, 1 也叫递归出口. 因此 , 递归算法的设计步骤具体是 :
例 1 n 用 c语言实现) 求 !(
f a fc it ) l ta (n o n
{ ot ; fa f l
i n< )pit “ 0 d t err ” ; f ( 0 r f n< ,aa r ! ) n( o
e ei n== n==1 f ; l ( s f 0l l ) =1 e ef f ( l =n a n一1 ; s c ) rtr( ) } e nf; u

维普资讯

萍, 黄小兰 : 例析程序设计 中的递归算法
3 递归算 法 的设计 步骤 每个递 归过 程 的设计 一般 分 为两 大步 骤 : 回推 ( 大规模 到小 规模 , 未 知到 已知 ) 从 从 和递 推 ( 小 规模 到 从
大规模 , 从已知到结果) 形象地给出求 5 . 1的递归过程是 :
() 1 回推 : = 41_4 = 1 5 1 5X 1 4X 3 未知 () 2 递推 :

程序设计课程中的递归算法分析

程序设计课程中的递归算法分析

7 6
安 阳 师 范 学 院 学 报
20 02薤
t ( )/*调 用 试 探 放 置 的 函 数 , 第 1 皇 后 选 r 1; v 为 个
位 要 在 第 2列 上 放 皇 后 。 , 被 , 由 循 环 中找到 j =3时 位 置合 适 , 后第 三次 然
/*n m存 放解 的个 数 * u /
vi p n( , ) o r t) t ; d i ( f (1 , o 1 =l m( =1 ; r" 1 6 m+ +)
{[ 一l a m] ; bm [ =1 ;
c m] ; [ =l
维普资讯
[ 收稿 日期 ]O l 4 2O 一0 一叭 ( 作者 简介 】 陈佳(94 ) 女 , 阳职业技术学院讲 师。 I6一 , 濮
i 7 ,[ 7 ,[ 7 ,[ ] n a[ ] b 1 ] c 1 ]X 9 ; t m n m=0 _ u 1 ;
m i( a ) n
;t i m; n
[5 表示 左下 一右 上 方 向 的 l 1] 5条斜 线上 有无 皇 后 . 、 、 三 个数 组 都定 义 的足够 大 。x 1 _x 8 ab c [ ]- [ ] -
表示 每列上 放 置 皇后 的行 位 置 。 ij 示 当 前正 、表
在 试探 的第 i 皇后 的列 和行位 置 。 个
[ 关键词】 递归; 子程序 ; 点地 址 ; 斯 堆栈 ; 口参数 ; 人 压栈 [ 田分类号 】 4 中 62 ,
在 子 程序 中直接 或 间接 调 用 自身 叫做 递 归 。 它其 实 是 子程 序嵌 套 调 用 的特 殊 形式 , 只不 过 是 嵌 套 调用 了 自身 。这个概 念 理解 上的 困难 来 自两 方 面 , 要 弄 清楚 这 两点 , 归 也 并 非 是 难 以理 只 递

数据结构与算法分析论文(递归的讨论)

数据结构与算法分析论文(递归的讨论)

数据结构论文——递归算法的讨论所谓递归算法是把问题转化为规模缩小了的同类问题的子问题。

然后递归调用函数(或过程)来表示问题的解。

一个过程(或函数)直接或间接调用自己本身,这种过程(或函数)叫递归过程(或函数)。

递归过程一般通过函数或子过程来实现。

递归方法:在函数或子过程的内部,直接或者间接地调用自己的算法。

递归算法是一种直接或者间接地调用自身算法的过程。

在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解。

递归算法解决问题的特点:(1) 递归就是在过程或函数里调用自身。

(2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。

(3) 递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。

(4) 在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。

递归次数过多容易造成栈溢出等。

所以一般不提倡用递归算法设计程序。

下面就让我们结合例子详细讨论一下递归算法。

一、递归算法的原理递归算法简单的说就是在函数中调用函数自身,不断调用,直到满足函数得出计算结果(某个条件)。

因为其需要不断循环的调用自身,所以称为递归调用。

递归的原理,其实就是一个栈(stack), 比如求5的阶乘,要知道5的阶乘,就要知道4的阶乘,4又要是到3的,以此类推,所以递归式就先把5的阶乘表示入栈, 在把4的入栈,直到最后一个,之后呢在从1开始出栈, 看起来很麻烦,确实很麻烦,他的好处就是写起代码来,十分的快,而且代码简洁,其他就没什么好处了,运行效率出奇的慢。

还有一个十分形象的例子:从前有座山,山里有个庙,庙里有个老和尚正在讲故事:从前有座山,山里有个庙,庙里有个老和尚正在讲故事:从前有座山,山里有个庙,庙里有个老和尚正在讲故事……如此循环往复到最终的要求。

递归分为2种,直接递归和间接递归。

直接递归,比如方法A内部调用方法A自身。

间接递归,比如方法A内部调用方法B,方法B内部调用方法C,方法C 内部调用方法A。

递归算法设计及效率分析

递归算法设计及效率分析

基本 思想是 : 规 模 大 的 、 难 解 决 的 问 题 变成 规 把 较 运行环境 下 , 算法的时 间复杂度 越高 , 法 的执行 算 模 较小 的 、 易解 决 的同一类 问题 。规模 较 小 的问题 时间越长 ; 反之 , 时 间越 短 。算法 常 见 的时 间复 执行 又变成 规模 更小 的 问题 , 且小 到 一定 程 度可 以直 杂度按 优劣 排 序 有 : n 、 n )O( …O( ! 并 O( )O( 、 n) n)
维普资讯
第3 5卷 (0 7 第 2期 20 )
计算机与数字工程
2 5
递 归 算 法设 计及 效 率 分 析
袁劲 松 杨伟 明
佛山 58 4 ) 2 0 1 ( 东 纺织 职业 技 术 学 院 自动 化 系 广


递归算法是非常常用和实用 的程序设计方法 , 归算 法的效率 问题值得去研究 , 出针 对递 归算法 的一般性 递 给
间随 输入规 模 的增长 而 变化 的情况 是 可行 的 , 由此 态修 改查 表实 现。
产生 了算法 的时 间 度 量 。算 法 的时 间 度 量 是依 据 3 2 递 归算法 的设计 步骤 . 算法 中最 大语 句频度 ( 指算 法 中基 本语句 执行 的次 3 2 1 决定 问题 规模 的参 数 . .

步 的分析 提供有 效 的工具 。
3 递 归算法 的设计方法
适 合用 递归 算法 解决 的问题
2 算法效率Байду номын сангаас析
3 1 首先 判断该 问题 是否 可 以采用递 归解 决 , . 这 通 常 , 们 所 关 心 的算 法 效 率有 两种 : 间效 人 时 类 问题 一般 具有 以下 性质

算法设计技巧与分析

算法设计技巧与分析

算法设计技巧与分析算法设计技巧是计算机科学领域中非常重要的一部分。

一个好的算法能够提高程序的效率,减少资源的消耗。

算法设计的技巧有很多种,比如递归、分治、贪心、动态规划等等。

以下将对一些常用的算法设计技巧进行分析和讨论。

递归是一种非常常见的算法设计技巧。

递归是指一个函数在执行的过程中会调用自身。

递归通常需要一个基本的情况和一个递推的情况。

递归的好处是能够简化问题的求解过程,但是递归也有一些缺点,比如递归的深度过大会导致栈溢出的问题。

在设计递归算法时,需要注意避免这种情况的发生。

分治是一种将问题分解成多个子问题并将子问题的解合并起来得到最终解的算法设计技巧。

分治算法通常可以通过递归来实现。

在设计分治算法时,需要注意子问题之间的关系,以及如何将子问题的解合并起来。

贪心是指每一步都选择当前最优解的算法设计技巧。

贪心算法通常需要证明每一步的最优解一定能够导致最终的最优解。

贪心算法的好处是简单、高效,但是贪心算法不能解决所有的问题,有些问题需要使用动态规划等其他算法进行求解。

动态规划是一种将问题分解成多个子问题并选择最优的子问题解组合得到最终解的算法设计技巧。

动态规划通常需要一个表格来存储中间的结果,以便后续的计算。

在设计动态规划算法时,需要注意问题的重叠子问题特性,以及如何利用已经计算过的结果来加速计算。

在进行算法设计时,还需要考虑时间复杂度和空间复杂度。

时间复杂度是用来衡量算法执行时间的参数,通常用“大O记法”来表示。

空间复杂度是用来衡量算法消耗的空间的参数,也用“大O记法”来表示。

在算法设计中,通常要追求时间复杂度和空间复杂度尽量低。

除了以上几种常见的算法设计技巧外,还有很多其他的算法设计技巧,比如回溯、剪枝等等。

在实际的算法设计中,不同的问题可能需要采用不同的算法设计技巧。

因此,对算法设计技巧的熟练掌握和运用是非常重要的。

综上所述,算法设计技巧与分析是计算机科学中的重要内容。

通过合理选择和运用不同的算法设计技巧,能够提高程序的效率,从而更好地解决问题。

从递归算法看数学在计算机程序设计方面的应用

从递归算法看数学在计算机程序设计方面的应用

及其重要 的地位. 同时 ,用数 擘的思维解决各种程序设 计方面的难题也 是十分重要的.在程序设计 当中所解决 的 相 当一部 分问题都会涉及到各种各样的科学计算 ,这需要程序 员将实际问题转换为程序 ,要经过对 问 题抽 象的过 程 ,建立起 完善的数学模 型,才能设计出好 的软件.文章将介绍递归算法在程序设计 中的应用并探讨数 学知识 在
要 证 明 该 定 理 对 于 l≤ N - + <k l一 定 是 正 确 的 . 一 旦 给 出 - -
了如何扩 展正确情 况的范围,就证明了该 定理对 于所有 的 情况都是正确的.
“ 兔子 ” 问题 图 解
逐月推算,我们可 以得到数 列:l ,2 ,5 , 。l ,3 ,8
I ,2 ,3 ,5 ,8 ,14 3 ,……数列 中的每一项 , 3 I 4 5 9 4 ,2 3 则称 为 “ 斐波那契数 ” .第 十三位的斐波 那契数 ,即为 一 对刚 出生 的 ,兔,一年 内所能繁殖成 的兔子 的对数 .从 斐 J 、
件 的时候应 当充分融入软件 的设计 思想 ,才能使硬件在程
序 的指挥下发挥极致 的性 能.在软件 设计的时候也要充分 考虑硬件 的特点 ,才 能冲破软件效率 的瓶 颈 .达到硬件和 软件设计的统一 ,一般 的程序设计 者很难将 这样 的思想贯 穿在其程序设计当中 .仅举个简单 的例子 ,我们 在写一些
定理 I 以通过如 下程序段来实现 ( + ) 可 C +: / /自然数列前 N项求和公式
p bi s t n it ) ul ai l gsn c t co ( n
收 稿 日期 :2 o .-0 0 763
作者简介 :马 良斋 (98 ) 17 ~ ,男,回族 ,兰州市人 ,兰州交通 大学电子与信息工程学院教 师,主 要从事计算机基础 的教
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
科技资讯 2010 NO.31 SCIENCE & TECHNOLOGY INFORMATION 递归算法在程序设计中的应用分析
信 息 技 术
吴川 江海宁 ( 中国矿业大学徐海学院 江苏徐州 2 2 1 0 0 8 )
摘 要:递归算法是程序设计中一种重要的方法,使用递归方法结构清晰,可读性强,而且容易用数学归纳法来证明算法的正确性,因此它
递 归 的 特 点 是 自 己 调 用 自 己 。如 果 在 一 个 函 数 (过 程 )中 ,它 自 己 调 用 了 自 己 ,这 种现象称之为直接递归,如果A函数调用B 函 数 ,B函 数 又 反 过 来 调 用 A函 数 ,那 这 种 现 象 叫 做 间 接 递 归 。和 迭 代 类 似 ,如 果 在 递 归中没有设定退出条件,递归会一直进行 下去,从而大量消耗空间和时间资源,陷入 死循环。
闭合差需符合下式规定:
Vx ≤ 4n σ Vy ≤ 4n σ Vz ≤ 4n σ
3
3
3
V ≤ 2 nσ
(5)无 约 束 平 差 中 ,基 线 分 量 的 改 正 数
的绝对值需符合下式规定:
V∆X ≤ 3σ V∆Y ≤ 3σ V∆Z ≤ 3σ 式 中 :n为 闭 合 环 边 数 ,σ 为 仪 器 的 标 称精度。 3 . 5 数据后处理 (1)GPS观测数据内业编辑输入相关点 位 信 息 后 ,采 用 接 收 机 配 备 的 商 用 软 件 Ashtech solutions 2.5进行基线解算,保证 每一条基线都求出整周模糊度。
f(2...100)=0 //f(n)赋初值
int fibonacci(int n)
{ if f(n) ≠ 0 return F(n); 复计算
//避免重
if n=0 or 1
t=n;
if n>1 t= fibonacci(n-1)+fibonacci
(n-2);
f(n)=t
} 通过保存f(n)的解,避免了大量的重复 计 算 ,提 高 了 算 法 的 时 间 效 率 。递 归 算 法 的 通用性显著增强。
1 递归及其本质
在程序设计与分析中,递归技术是十 分 有 用 的 。递 归 在 程 序 设 计 中 有 多 种 形 式 , 问题定义是递归的比如阶乘,数据结构是 递 归 的 比 如 二 叉 树 ,问 题 解 法 是 递 归 的 。以 上 形 式 都 可 以 采 用 递 归 方 法 来 处 理 。使 用 递归技术往往可使函数的定义和算法的描 述 简 洁 且 易 于 理 解 。有 些 数 据 结 构 如 二 叉 树等,由于其本身固有的递归特性,特别适 合 用 递 归 的 形 式 来 描 述 。另 外 ,还 有 一 些 问 题,虽然其本身没有明显的递归结构,但使 用递归技术来求解可使得设计出的算法简 洁易懂且易于分析。
(4)设 置 边 界 条 件 ,控 制 递 归 。 (5)设 计 函 数 ,确 定 参 数 。
3 递归算法的改进
递归算法由于其时间和空间开销方面 太大,在处理问题时,往往不能处理规模较 大 的 问 题,需 要 转 换 成 迭 代 的 方 法 。如 果 这
(下转 1 8 页)
16 科技资讯 S C I E N C E & T E C H N O L O G Y I N F O R M A T I O N
递归严格说来并不是一种具体的算法 策略,是指函数/过程/子程序在运行过程 中 直 接 或 间 接 调 用 自 身 的 行 为 。递 归 是 计 算机科学的一个重要概念,一般采用了递 归 思 想 的 算 法 被 称 为 递 归 算 法 。递 归 的 方 法是程序设计中有效的方法,采用递归编 写 程 序 能 使 程 序 变 得 简 洁 和 清 晰 。但 是 用 递归方式所描述的算法,学生一方面对于 复杂问题不容易理解,弄不清楚递归函数 执行的步骤及过程,另一方面需要自己编 写程序时更是没有头绪。
(2)重复基线较差和非同步环闭合差的 检核仍按外业基线检核时的要求进行。 3 . 6 网平差
(1)对整网进行无约束平差并检核GPS 网的观测质量。以所有独立基线组成闭合图 形,以三维基线向量及相应方差协方差阵作 为 观 测 信 息 ,以 网 一 点 的 WGS-84系 三 维 坐 标作为起算依据,进行全网无约束平差。
(2)对 GPS网 进 行 图 型 设 计 时 ,应 使 闭 合 环的边数小于规范的规定,仅允许个别闭合 环的边数等于规范的边数,为了使外业观测 有 计 划 的 进 行 ,避 免 GPS独 立 边 选 择 的 随 意 性 ,便 于 及 时 检 查 观 测 结 果 。宜 按 设 计 网 图 选定GPS独立边,必要时,在经过技术负责人 审议后,可根据具体情况作适当调整。
信 Байду номын сангаас 技 术
5 结语
随着城市建设规模日益扩大,今后遇 到高速公路拓宽改建的项目会越来越多, 在保证工程进度及精度要求下,如何将GPS 技术在大型工程施工控制中灵活运用是一 个 只 得 探 讨 的 课 题 。通 过 本 工 程 的 实 践 笔 者得到如下一些体会。
(1)GPS观测受到各种外界因素的影响, 有可能产生粗差和各种随机误差,为了对 GPS观测成果进行质量检查,保证成果的可 靠并恰当地评定精度,就要求由非同步独 立 观 测 边 构 成 闭 合 环 或 符 合 线 路 。作 业 时 不应将非独立边作为独立观测边处理,更 不能将同步闭合环当作非同步闭合环。
(2)对 整 网 进 行 二 维 约 束 平 差 。以 深 圳 市 平 面 控 制 网 GP S 点“ G2015、203 5”作 为 起 算数据,对控制网进行二维约束平差计算。
4 精度评定结果
(1)环 闭 合 差 统 计 (表 1)。 (2)基 线 残 差 统 计 (表 2)。 (3)平面平差基线相对精度统计(表3)。 (4)gps点 位 中 误 差 统 计 。 100%的 点 位 精 度 在 1.0cm以内,其中 46%精度小于0.5cm。 以上充分说明观测数据合格,基线解算 质量良好,GPS网的测量精度满足四等要求。
为算法设计、调试程序带来很大方便。本文针对学生在学习程序设计课程时对递归算法难以理解及掌握等情况,阐述了递归算法的本质、
分类、计算思维方式以及如何提高递归算法在大规模问题中的时间效率。
关键词:递归算法 程序设计 计算思维 时间效率
中 图 分 类 号 :G6
文献标识码:A
文 章 编 号 :1672-3791(2010)11(a)-0016-02
科技资讯 2010 NO.31 SCIENCE & TECHNOLOGY INFORMATION
(2)重 复 基 线 的 测 量 差 值ds ≤ 2 2σ 。
(3)各级GPS网同步环闭合差需符合下
式规定:
Wx ≤ n σ Wy ≤ n σ Wz ≤ n σ
5
5
5
Ws ≤ 2 n σ 5
(4)各级GPS网异步环或符合路线坐标
表1
参考文献
[1] 周 忠 漠 ,易 杰 军 ,周 琪 .GPS卫 星 测 量 原
理 与 应 用 [M].北 京 :测 绘 出 版 社 ,1995.
[2] 张 雨 化 .公 路 勘 测 设 计 [M].武 汉 :人 民
表2
交 通 出 版 社 ,1986.
[3] 刘 基 余 ,李 征 航 ,王 跃 虎 ,等 .全 球 定 位
系 统 原 理 及 应 用 [M].北 京 :测 绘 出 版
社 ,1992.
表3
(上接 1 6 页) 时运用非递归的方法又不易解决时,可以 采 取 一 种 空 间 换 时 间 的 策 略 。比 如 f ib on a cc i 数列问题,代码如下:
int fibonacci(int n) { if (n <= 1) return 1; return fibonacci(n-1)+fibonacci(n-2); } 其 时 间 复 杂 度 达 到 O(2n),中 间 包 含 了 大量的重复计算,但如果将计算过的值保 存 一 下 ,如 果 用 到 ,则 查 一 下 ,可 以 避 免 相 同 子 问 题 的 计 算 。具 体 代 码 如 下 。
图 1 阶乘函数
递 归 的 本 质 在 于 在 调 用 的 过 程 中 ,问 题的规模会缩小,使用递归得到的相应的 子问题更容易解决,可以用递归方程来表 示 其 依 赖 关 系 。另 一 方 面,规 模 小 到 一 定 程 度,问题就可以直接解决,称为边界条件。 递归方程和边界条件是递归的2个要素,如 图1阶乘函数的设计,在程序设计中表现为 一个分支结构。
量都可以作为参数,参数的选择具备一定 的技巧。
实例:对于一个整数n的划分,就是把n 表 示 成 一 系 列 的 正 整 数 的 和 的 表 达 式 。注 意 划 分 与 次 序 无 关 。给 一 个 n 求 他 的 所 有 划 分数。
例 如 :6可 以 可 以 划 分 为 6;5+1;4+2, 4+1+1;3+3,3+2+1,3+1+1+1;2+2+2; 2+2+1+1;2+1+1+1+1;1+1+1+1+1+1。
2 递归的计算思维方式
递归算法设计的关键在于如何设定代 表问题变化的参数和递归关系式使问题越 来 越 简 单,规 模 越 小 。如 果 能 够 设 定 好 参 数 以及递归方程,则问题很容易解决。 2 . 1 递归类型的分类
按照所应用类型的不同,递归算法可 以分为以下几类。
(1)基于归纳的递归算法。 在此类问题中,规模为N的问题可以归 纳到前面若干项的计算,问题的求解依赖 于规模缩小的形式,在运用递归的时候大 部 分 问 题 属 于 此 种 类 型,比 如 汉 诺 塔 , fibonacci数列等等[2]。 (2)基于划分的递归算法。 这种递归算法把问题划分成一个或多 个 子 问 题 来 递 归 的 求 解 。这 些 子 问 题,在结 构上和原来的问题一样,但在规模上比原 来 的 小 。如 果 子 问 题 相 对 来 说 还 是 太 大,可 以 继 续 划 分 。这 样 分 别 求 解 这 些 子 问 题,并 把这些子问题组合起来,从而获得原问题 的 解 。比 如 快 速 排 序 ,2分 检 索 ,合 并 排 序 的 递 归 形 式 [2]。 (3)基于迭代的递归算法。 在某些问题中,规模较大的问题既不 可以归纳到前面若干项,也不能划分成大 致相等的子问题,而是需要对所有情况进 行列举,产生符合条件的若干子问题,比如 整 数 因 子 分 解 计 数 问 题 [1]。 2 . 2 参数的选择 在对递归问题求解时,参数的选择是 关键一步,作为递归函数的参数往往是问 题中影响结果的自变量,但并不是所有的
相关文档
最新文档