- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
递归 课题:递归与回溯 目标: 知识目标:递归概念与利用递归进行回溯 能力目标:回溯算法的应用 重点:回溯算法 难点:回溯算法的理解 板书示意: 递归的理解 利用递归回溯解决实际问题(例14、例15、例16、例17、例18) 利用回溯算法解决排列问题(例19) 授课过程: 什么是递归?先看大家都熟悉的一个民间故事:从前有座山,山上有座庙,庙里有一个老和尚在给小和尚讲故事,故事里说,从前有座山,山上有座庙,庙里有一个老和尚在给小和尚讲故事,故事里说……。象这样,一个对象部分地由它自己组成,或者是按它自己定义,我们称之是递归。 例如,我们可以这样定义N!,N!=N*(N-1)!,因此求N!转化为求 (N-1)!。这就是一个递归的描述。 因此,可以编写如下递归程序: program Factorial; var N: Integer; T: Longint; function Fac(N: Integer): Longint; begin if N = 0 then Fac := 1 else Fac := N * Fac(N - 1) end; begin Write(N = ); Readln(N); T := Fac(N); Writeln(N! = ,T); end. 图13展示了N=3的执行过程。由上述程序可以看出,递归是一个反复执行直到递归终止的过程。 设一个未知函数f,用其自身构成的已知函数g来定义: 为了定义f(n),必须先定义f(n-1),为了定义f(n-1),又必须先定义f(n-2) ,…,上述这种用自身的简单情况来定义自己的方式称为递归定义。 递归有如下特点: ①它直接或间接的调用了自己。 ②一定要有递归终止的条件,这个条件通常称为边界条件。 与递推一样,每一个递推都有其边界条件。但不同的是,递推是由边界条件出发,通过递推式求f(n)的值,从边界到求解的全过程十分清楚;而递归则是从函数自身出发来达到边界条件,在通过边界条件的递归调用过程中,系统用堆栈把每次调用的中间结果(局部变量和返回地址)保存起来,直至求出递归边界值f(0)=a。然后返回调用函数。返回的过程中,中间结果相继出栈恢复,f(1)=g(1,a)(f(2)=g(2,f(1))(……(直至求出f(n)=g(n,f(n-1))。 由此可见,递归算法的效率往往很低,费时和费内存空间。但是递归也有其长处,它能使一个蕴含递归关系且结构复杂的程序简洁精炼,增加可读性。特别是在难于找到从边界到解的全过程的情况下,如果把问题进一步,其结果仍维持原问题的关系,则采用递归算法编程比较合适。 递归算法适用的一般场合为: ① 数据的定义形式按递归定义。 如裴波那契数列的定义: 对应的递归程序为 function fib(n: Integer): Integer; begin if n = 0 then fib := 1 {递归边界} else if n = 1 then fib := 2 {递归边界} else fib := fib(n – 2) + fib(n – 1); {递归} end; 这类递归问题可转化为递推算法,递归边界为递推的边界条件。例如上例转化为递推算法即为 function fib(n: Integer): Integer; begin f[0] := 1; f[1] := 2; {递推边界} for I := 2 to n do f[I] := f[I – 1] + f[I – 2]; fib := f(n); end; ② 数据之间的关系(即数据结构)按递归定义。如树的遍历,图的搜索等。 ③ 问题解法按递归算法实现。例如回溯法等。 对于②和③,可以用堆栈结构将其转换为非递归算法,以提高算法的效率以及减少内存空间的浪费。 下面以经典的N皇后问题为例,看看递归法是怎样实现的,以及比较递归算法和非递归算法效率上的差别。 例15:N皇后问题 在N*N的棋盘上放置N个皇后而彼此不受攻击(即在棋盘的任一行,任一列和任一对角线上不能放置2个皇后),编程求解所有的摆放方法。 分析: 由于皇后的摆放位置不能通过某种公式来确定,因此对于每个皇后的摆放位置都要进行试探和纠正,这就是“回溯”的思想。在N个皇后未放置完成前,摆放第I个皇后和第I+1个皇后的试探方法是相同的,因此完全可以采用递归的方法来处理。 下面是放置第I个皇后的的递归算法: Procedure Try(I:integer); {搜索第I行皇后的位置} var
您可能关注的文档
- 《算法艺术与信息学竞赛》的学习指导【信息技术】.pdf
- 《算符破译》解题报告【信息技术】.doc
- 0.回溯法【信息技术】.doc
- 01广搜hash优化【信息技术】.ppt
- 1.高逸涵《与圆有关的离散化方法》【信息技术】.doc
- 1.高逸涵《与圆有关的离散化方法》【信息技术】.ppt
- 1.深度优先搜索【信息技术】.doc
- 1.杨弋《Hash在信息学竞赛中的一类应用》【信息技术】.ppt
- 1_数论初步【信息技术】.ppt
- 1-2【信息技术】.pdf
- DB51_T 3137-2023 柑橘园间作豆类栽培技术规程.docx
- Q_HY 07-2023 低温阀门技术条件.docx
- DB52∕T 1454-2019 精神病专科护理服务基本规范.docx
- T_XJZJXH GY10002.2-2024 “新疆品质” 特色产品技术规范 薰衣草精油.docx
- DB21_T 3981-2024 滑菇采收贮运技术规程.docx
- DB1308_T 368-2025 北柴胡生产技术规程.docx
- DB1307_T 454-2024 谷子品种 张杂谷6号.docx
- DB36T 1574-2022 食品快速检测结果验证通用技术规范.docx
- DB13(J)∕T 202-2016 公共建筑能耗远程监测系统技术标准.docx
- DB21_T 1564.9-2007 岩土工程勘察技术规程 抽水试验规程.docx
文档评论(0)