- 1、本文档共22页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* Logo程序设计 (授课讲稿) 吴剑辉 深入递归设计 在对递归有了一定的感性认识之后,深入探讨一下递归的原理,总结一下用递归进行程序设计的规律,可以帮助我们掌握更加复杂的递归问题的程序设计方法大有益处。 一、如何正确认识递归 二、几种递归结构类型 三、画出更奇妙的图形 一、如何正确认识递归 递归是一种思维、推理和解决问题的方法。递归解决的是规律性很强的问题,只要“略微简化的同类问题”可以解决。即,“自顶而下,步步求精”的方法。 在日常生活中也有类似递归的例子。人们常用“报数”的方法统计一队人的总人数。报数的规则是: 第一个人报1,后边的人只要在前边一个人报的数加 1 就可以了。假如你去问最后一个人,他报的数是否正确,我想他会说: “如果我前边的人报的都正确,我按规则加1,我报的数就正确。” 这种回答是科学的,因为他采用了递归的办法,把N个人的问题变成了前边N–1个人的问题,外加正确的报数规则。 用递归方法分析问题的要点 设计递归前的准备: ⑴、分层化简:分析每个图形的最基本图形。 ⑵、准确方位:确定海龟起始的位置与方向。 ⑶、选定标记:找出上下层 “递归” 插入点。 设计递归中的步骤: ⑴、设计模式:先编写出最底层的图形过程。 ⑵、求解要素:执行过程确定图形正确无误。 ⑶、逐步完善:逐一插入 “递归” 步步为营。 二、几种递归结构类型 为了更深入地研究递归过程,我们根据递归调用的位置、次数、直接和间接调用的情况,将递归过程分成几种结构类型,逐一讨论。 1、直接递归与间接递归过程 如果一个递归过程在过程体中直接调用自己,我们就称这种直接调用自身的递归调用为直接递归调用,相应的过程称为直接递归过程。 TO A1 :N IF :N1 STOP FD 50 REPEAT 3[FD 30 RT 120] BK 20 RT 60 A1 :N-1 END 请看例题1: ?DRAW A1 6↙ 如果一个递归过程在过程体中并不直接调用自己过程,而是通过调用一个或几个其它过程,最后调用回自身过程,这种通过调用其它过程来实现了递归调用的方法,我们称为间接递归调用,相应的过程则为间接递归过程。 请看例题2: TO A2 :N IF :N1 STOP B2 :N END TO B2 :N FD 50 REPEAT 3[FD 30 RT 120] BK 20 RT 60 A2 :N-1 END ? DRAW A2 6 ↙ ? DRAW B2 6 ↙ 再看例题3: TO A3 :N :B IF :N1 STOP ZFX :B LT 165 WAIT 50 B3 :N-1 :B+10 END TO B3 :N :B IF :N1 STOP SJX :B RT 165 WAIT 50 A3 :N-1 :B+10 END ? DRAW A3 10 20 ↙ ? DRAW B3 10 20 ↙ 另一类的过程为各自的过程体都构成递归形式,而则通过相互之间的调用方法来实现递归,我们也称之为间接递归调用,相应的过程称为间接递归过程。 2、尾部递归、首部递归与中部递归。 递归调用语句出现在过程体的不同位置(尾部、头部或中间)分为尾部递归、首部递归和中部递归三种,后两者是较复杂。 ⑴、例题4:画逐层减半(或增半)的正方形(如图)。 ? DRAW A4A 100 ? DRAW A4B 100 TO A4B :S IF :S10 STOP A4B :S/2 REPEAT 4[FD :S RT 90] PU FD :S PD END TO A4A :S IF :S10 STOP REPEAT 4[FD :S RT 90] PU FD :S PD A4A :S/2 END 尾部递归过程: 首部递归过程: TO A4D_2 :S IF :S10 STOP REPEAT 4[FD :S RT 90] FD :S A4D_2 :S/2 BK :S END TO A4C_1 :S FD :S BK :S REPEAT 4[FD :S RT 90] END TO A4C_2 :S IF :S10 STOP FD :S A4C_2 :S/2 BK :S REPEAT 4[FD :S RT 90] END TO A4D_1 :S REPEAT 4[FD :S RT 90] FD :S BK :S END 中部递归过程: ? DRAW A4C_1 100 ? DRAW A4D_1 100 ? DRAW A4C_2 100 ? DRAW A4D
文档评论(0)