高中信息技术 全国青少年奥林匹克联赛教案 递归与回溯法

高中信息技术 全国青少年奥林匹克联赛教案 递归与回溯法

ID:5816038

大小:301.00 KB

页数:16页

时间:2017-12-25

高中信息技术 全国青少年奥林匹克联赛教案 递归与回溯法_第1页
高中信息技术 全国青少年奥林匹克联赛教案 递归与回溯法_第2页
高中信息技术 全国青少年奥林匹克联赛教案 递归与回溯法_第3页
高中信息技术 全国青少年奥林匹克联赛教案 递归与回溯法_第4页
高中信息技术 全国青少年奥林匹克联赛教案 递归与回溯法_第5页
资源描述:

《高中信息技术 全国青少年奥林匹克联赛教案 递归与回溯法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、递归与回溯法课题:递归与回溯目标:知识目标:递归概念与利用递归进行回溯能力目标:回溯算法的应用重点:回溯算法难点:回溯算法的理解板书示意:1)递归的理解2)利用递归回溯解决实际问题(例14、例15、例16、例17、例18)3)利用回溯算法解决排列问题(例19)授课过程:什么是递归?先看大家都熟悉的一个民间故事:从前有座山,山上有座庙,庙里有一个老和尚在给小和尚讲故事,故事里说,从前有座山,山上有座庙,庙里有一个老和尚在给小和尚讲故事,故事里说……。象这样,一个对象部分地由它自己组成,或者是按它自己定义,我们称之是递

2、归。例如,我们可以这样定义N!,N!=N*(N-1)!,因此求N!转化为求(N-1)!。这就是一个递归的描述。因此,可以编写如下递归程序:programFactorial;varN:Integer;T:Longint;functionFac(N:Integer):Longint;beginifN=0thenFac:=1elseFac:=N*Fac(N-1)end;beginWrite('N=');Readln(N);T:=Fac(N);Writeln('N!=',T);end.16图13递归调用示例图图13展示了N

3、=3的执行过程。由上述程序可以看出,递归是一个反复执行直到递归终止的过程。设一个未知函数f,用其自身构成的已知函数g来定义:为了定义f(n),必须先定义f(n-1),为了定义f(n-1),又必须先定义f(n-2),…,上述这种用自身的简单情况来定义自己的方式称为递归定义。递归有如下特点:①它直接或间接的调用了自己。②一定要有递归终止的条件,这个条件通常称为边界条件。与递推一样,每一个递推都有其边界条件。但不同的是,递推是由边界条件出发,通过递推式求f(n)的值,从边界到求解的全过程十分清楚;而递归则是从函数自身出发

4、来达到边界条件,在通过边界条件的递归调用过程中,系统用堆栈把每次调用的中间结果(局部变量和返回地址)保存起来,直至求出递归边界值f(0)=a。然后返回调用函数。返回的过程中,中间结果相继出栈恢复,f(1)=g(1,a)àf(2)=g(2,f(1))à……à直至求出f(n)=g(n,f(n-1))。递归按其调用方式分直接递归——递归过程P直接自己调用自己;间接递归——即P包含另一过程D,而D又调用P;由此可见,递归算法的效率往往很低,费时和费内存空间。但是递归也有其长处,它能使一个蕴含递归关系且结构复杂的程序简洁精炼

5、,增加可读性。特别是在难于找到从边界到解的全过程的情况下,如果把问题进一步,其结果仍维持原问题的关系,则采用递归算法编程比较合适。递归算法适用的一般场合为:①数据的定义形式按递归定义。如裴波那契数列的定义:16对应的递归程序为functionfib(n:Integer):Integer;beginifn=0thenfib:=1{递归边界}elseifn=1thenfib:=2{递归边界}elsefib:=fib(n–2)+fib(n–1);{递归}end;这类递归问题可转化为递推算法,递归边界为递推的边界条件。例如

6、上例转化为递推算法即为functionfib(n:Integer):Integer;beginf[0]:=1;f[1]:=2;{递推边界}forI:=2tondof[I]:=f[I–1]+f[I–2];fib:=f(n);end;②数据之间的关系(即数据结构)按递归定义。如树的遍历,图的搜索等。③问题解法按递归算法实现。例如回溯法等。对于②和③,可以用堆栈结构将其转换为非递归算法,以提高算法的效率以及减少内存空间的浪费。下面以经典的N皇后问题为例,看看递归法是怎样实现的,以及比较递归算法和非递归算法效率上的差别。例

7、15:N皇后问题图14八皇后的两组解16在N*N的棋盘上放置N个皇后而彼此不受攻击(即在棋盘的任一行,任一列和任一对角线上不能放置2个皇后),编程求解所有的摆放方法。分析:由于皇后的摆放位置不能通过某种公式来确定,因此对于每个皇后的摆放位置都要进行试探和纠正,这就是“回溯”的思想。在N个皇后未放置完成前,摆放第I个皇后和第I+1个皇后的试探方法是相同的,因此完全可以采用递归的方法来处理。下面是放置第I个皇后的的递归算法:ProcedureTry(I:integer);{搜索第I行皇后的位置}varj:integer

8、;beginifI=n+1then输出方案;forj:=1tondoif皇后能放在第I行第J列的位置thenbegin放置第I个皇后;对放置皇后的位置进行标记;Try(I+1)对放置皇后的位置释放标记;End;End;N皇后问题的递归算法的程序如下:programN_Queens;constMaxN=100;{最多皇后数}varA:array[1..MaxN

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。