1 / 18

Logo 程序设计

Logo 程序设计. ( 授课讲稿 ) 吴剑辉. 第五讲 复杂递归. 递归是一种思维、推理和解决问题的方法。递归解决的是规律性很强的问题,只要“略微简化的同类问题”可以解决。即,“自顶而下,步步求精”的方法。 递归调用语句出现在过程体的不同位置(尾部、头部或中间)分为尾部递归、首部递归和中部递归三种,后两者是较复杂。. 一、深入了解递归. 二、画二叉树学起. 三、多阶递归过程. 一、深入了解递归. 用尾部递归方式编写过程。. 用首部递归方式编写过程。. 1 、实例对照:设计倒计数和正计数过程。. TO DJS :N

levi-medina
Download Presentation

Logo 程序设计

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Logo程序设计 (授课讲稿) 吴剑辉

  2. 第五讲 复杂递归 递归是一种思维、推理和解决问题的方法。递归解决的是规律性很强的问题,只要“略微简化的同类问题”可以解决。即,“自顶而下,步步求精”的方法。 递归调用语句出现在过程体的不同位置(尾部、头部或中间)分为尾部递归、首部递归和中部递归三种,后两者是较复杂。 一、深入了解递归 二、画二叉树学起 三、多阶递归过程

  3. 一、深入了解递归 用尾部递归方式编写过程。 用首部递归方式编写过程。 1、实例对照:设计倒计数和正计数过程。 TO DJS :N IF :N<1 STOP PR :N DJS :N-1 END TO ZJS :N IF :N<1 STOP ZJS :N-1 PR :N END ? DJS 5↙ ? ZJS 5 ↙ 5 4 3 2 1 1 2 3 4 5 想一想:求⑴、100+99+98+…+2+1 ⑵、

  4. 2、实例对照:画逐层减半的正方形内切圆(如图)。 用尾部递归方式编写过程: TO ZQY1 :S IF :S<20 STOP REPEAT 4[FD :S/2 RT 90 FD :S/2] REPEAT 360[RT 0.5 FD :S/2*PI/180 RT 0.5] WAIT 100 ZQY1 :S/2 WAIT 100 END 用尾部递归方式编写过程: TO ZQY3 :S IF :S<20 STOP REPEAT 4[FD :S/2 RT 90 FD :S/2] REPEAT 360[RT 0.5 FD :S/2*PI/180 RT 0.5] PU FD 0.75*:S PD WAIT 100 ZQY3 :S/2 WAIT 100 END 用中部递归方式编写过程: TO ZQY2 :S IF :S<20 STOP REPEAT 4[FD :S/2 RT 90 FD :S/2] WAIT 100 ZQY2 :S/2 WAIT 100 REPEAT 360[RT 0.5 FD :S/2*PI/180 RT 0.5] END 用中部递归方式编写过程: TO ZQY4 :S IF :S<20 STOP REPEAT 4[FD :S/2 RT 90 FD :S/2] PU FD 0.75*:S PD WAIT 100 ZQY4 :S/2 WAIT 100 PU BK 0.75*:S PD REPEAT 360[RT 0.5 FD :S/2*PI/180 RT 0.5] END

  5. 3、实例说明:在一个过程体中允许多次的递归调用。 ⑴、二次递归过程。 ⑵、三次递归过程。 ⑶、四次递归过程。 TO S3 :L IF :L<10 STOP FD :L LT 75 S3 :L/2 RT 50 S3 :L/2 RT 50 S3 :L/2 RT 50 S3 :L/2 LT 75 BK :L END TO S2 :L IF :L<10 STOP FD :L LT 70 S2 :L/2 RT 70 S2 :L/2 RT 70 S2 :L/2 LT 70 BK :L END TO S1 :L IF :L<10 STOP FD :L LT 35 S1 :L/2 RT 70 S1 :L/2 LT 35 BK :L END ?S3 100↙ ?S1 100↙ ?S2 100↙

  6. 二、画二叉树学起 1、叉树问题 :以树杈交点(即节点)为界分层,每个节点都分出呈V形的树枝,这是一种复杂而有规律的基本图形。也是一种比较典型较复杂的递归问题。 ⑴、第一步:画树杈 (如右图)。 TO SHU :B :J LT :J/2 FD :B BK :B RT :J FD :B BK :B LT :J/2 END ?SHU 100 60↙ 【指导说明】: 画完树杈后,海龟要回到原来起始的位置和方向。

  7. ⑵、第二步:画二叉树。(编程步骤) TO SHU :B :J LT :J/2 FD :B BK :B RT :J FD :B BK :B LT :J/2 END IF :B<10 STOP “递归”插入点 ? SHU 80 60 4↙ SHU :B/2 :J SHU :B/2 :J ? SHU 80 60 4↙ 【编程关键】: 寻找生叉点并逐一在此处添加递归调用命令。

  8. 2、深入探究:从创造思维入手,运用 “图形想象” 的方法去思维、推理和解决问题。在搞清楚 “二叉树问题”的基础上, 经过变形的各种树的问题就易解。从而总结出用递归进行程序设计的规律和方法。 【指导说明】: ⑴、分析每个图形的最基本图形。 ⑵、确定海龟起始的位置与方向。 ⑶、找出上下层 “递归” 插入点。 ⑷、先编写出最底层的图形过程。 ⑸、执行过程确定图形正确无误。 ⑹、逐一插入 “递归” 步步为营。

  9. 从三角形到树叉 ⑴、在操作中学:画出左图所示图形。 第一步:分析图形的基本结构。 第二步:编写基本三角形SJ过程。 TO SJ :B LT 90 FD :B/2 RT 120 FD :B BK :B RT 60 FD :B LT 120 FD :B BK :B LT 60 FD :B/2 RT 90 END 基本图形 画出如图所示图形

  10. 30° 第三步:在上面的过程基础上,逐一插入“递归”命令行。 TO SJ :B LT 90 FD :B/2 RT 120 FD :B BK :B RT 60 FD :B LT 120 FD :B BK :B LT 60 FD :B/2 RT 90 END IF :B<10 STOP SJ :B/2 LT 30 RT 30 LT 30 SJ :B/2 RT 30 ?SJ 100 ↙ ?SJ 100 ↙ ?SJ 100 ↙ 逐一添加“递归”与“调整” RT 30 SJ :B/2 LT 30 ?SJ 100 ↙

  11. ⑵、在操作中学:再以“递归”插入点直接画出上图形。⑵、在操作中学:再以“递归”插入点直接画出上图形。 TO SJA :B IF :B<10 STOP PU LT 60 BK :B/4 LT 60 PD SJA :B/2 \ PU RT 60 FD :B/4 RT 60 PD FD :B RT 120 PU LT 60 BK :B/4 LT 60 PD SJA :B/2 \ PU RT 60 FD :B/4 RT 60 PD FD :B RT 120 PU LT 60 BK :B/4 LT 60 PD SJA :B/2 \ PU RT 60 FD :B/4 RT 60 PD FD :B RT 120 END TO SJB :B IF :B<10 STOP LT 90 FD :B/2 LT 30 SJB :B/2 RT 30 RT 120 FD :B LT 30 SJB :B/2 RT 30 RT 120 FD :B LT 30 SJB :B/2 RT 30 RT 120 FD :B/2 RT 90 END ?DRAW SJB 100 ↙ ?DRAW RT 30 SJA 100 ↙

  12. 动脑筋,画一画 ⑶ ⑷ ⑴ ⑵ ⑻ ⑺ ⑸ ⑹ ⑿ ⑽ ⑼ ⑾

  13. 三、多阶递归过程 在一个递归过程体中进行了若干种不同级的递归调用。 1、在操作中学:画出右图所示图形。 TO D :B FD :B LT 45 RT 45 RT 45 LT 45 BK :B END TO DD :N :B :J IF :N<0 STOP FD :B LT 45 DD :N-2 :B*:J*:J :J RT 45 DD :N-1 :B*:J :J RT 45 DD :N-2 :B*:J*:J :J LT 45 BK :B END ?FS DD 8 100 0.65↙ 【说明】::N是级数参数,:B是尺寸参数,:J是相邻两级树的尺寸比例参数。 ?D 100↙

  14. 2、在操作中学::S由0变大时树会不同程度地往一边倾斜。2、在操作中学::S由0变大时树会不同程度地往一边倾斜。 TO DSB :L :N IF :N<1 FD :L STOP REPEAT 2[LT 90 FD :N/2 RT 90 \ FD :L RT 90 FD :N/2 RT 90] DSB :L :N-2 END TO DSC :B :A :S IF :B<5 STOP DSB :B :B/10 LT :A-:S DSC :B*0.6 :A :S RT :A DSC :B*0.8 :A :S RT :A DSC :B*0.6 :A :S LT :A+:S BK :B END 【说明】::B是树干尺寸参数,:A是相邻两树叉夹角参数,:S是风力大小参数。 ? DSB 100 5↙ ? DSC 50 30 10↙ ? DSC 50 30 5↙ ? DSC 50 30 0↙

  15. 3、在操作中学:画出右图所示图形。 TO SJG :B :J IF :B<10 LT 90 YUAN 5 RT 90 STOP LT :J/2 FD :B SJG :B/2 :J BK :B RT :J FD :B/2 RT 90 FD :B/2 LT 90 YUAN 5 RT 90 BK :B/2 LT 90 FD :B/2 SJG :B/2 :J BK :B LT :J/2 END TO YUAN :R REPEAT 360[RT 0.5 FD :R*PI/180 RT 0.5] END ?SJG 100 60 ↙

  16. 4、想一想:在下面过程中插入“递归”,画出的图形怎样?4、想一想:在下面过程中插入“递归”,画出的图形怎样? TO Z1 :B IF :B<10 STOP REPEAT 4[FD :B Z1 :B/2 RT 90] END TO Z2 :B IF :B<10 STOP REPEAT 4[FD :B RT 90 Z2 :B/2] END TO J1 :B IF :B<10 STOP REPEAT 3[FD :B J1 :B/2 RT 120] END TO J2 :B IF :B<10 STOP REPEAT 3[FD :B RT 120 J2 :B/2] END

  17. 动脑筋,画一画 ⑷ ⑵ ⑶ ⑴ ⑸ ⑹

  18. 动脑筋,画一画 ⑻ ⑼ ⑽ ⑺ ?HW12 50 1 1 ?HW12 50 1 2 ?HW12 50 1 3 ?HW11 1 20 ?HW11 0 30 ?HW12 20 2 1 ⑾ ?HW12 10 4 1 ?HW12 20 3 1 ⑿ ?HW11 2 10 ?HW11 3 5

More Related