18
Logo Logo 程程程程 程程程程 ( 程程程程 ) 程程程

Logo 程序设计

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: Logo 程序设计

LogoLogo 程序设程序设计计

( 授课讲稿 ) 吴剑辉

Page 2: Logo 程序设计

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

一、深入了解递归

二、画二叉树学起

三、多阶递归过程

Page 3: Logo 程序设计

一、深入了解递归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 :NEND

? DJS 5 ↙ ? ZJS 5 ↙54321

12345

用尾部递归方式编写过程。

用首部递归方式编写过程。

想一想:求⑴、 100+99+98+…+2+1 100

1

99

1...

3

1

2

11 ⑵ 、

Page 4: Logo 程序设计

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 100END

用中部递归方式编写过程: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 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 100END

用中部递归方式编写过程: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

Page 5: Logo 程序设计

3 、实例说明:在一个过程体中允许多次的递归调用。 ⑴ 、二次递归过程。 ⑵ 、三次递归过程。

TO S1 :L IF :L<10 STOP FD :L LT 35 S1 :L/2 RT 70 S1 :L/2 LT 35 BK :LEND

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 :LEND

⑶ 、四次递归过程。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 :LEND

? S1 100↙

? S2 100↙

? S3 100↙

Page 6: Logo 程序设计

二、画二叉树学起 1 、叉树问题 :以树杈交点(即节点)为界分层,每个节点都分出呈 V 形的树枝,这是一种复杂而有规律的基本图形。也是一种比较典型较复杂的递归问题。

⑴ 、第一步:画树杈 (如右图)。TO SHU :B :J LT :J/2 FD :B BK :B RT :J FD :B BK :B LT :J/2END

? SHU 100 60↙

【指导说明】: 画完树杈后,海龟要回到原来起始的位置和方向。

Page 7: Logo 程序设计

⑵ 、第二步:画二叉树。 ( 编程步骤 )

【编程关键】: 寻找生叉点并逐一在此处添加递归调用命令。

TO SHU :B :J LT :J/2 FD :B BK :B RT :J FD :B BK :B LT :J/2END

SHU :B/2 :J

IF :B<10 STOP

SHU :B/2 :J

“ 递归”插入点

? SHU 80 60 4↙

? SHU 80 60 4↙

Page 8: Logo 程序设计

2 、深入探究:从创造思维入手,运用 “图形想象” 的方法去思维、推理和解决问题。在搞清楚 “二叉树问题”的基础上, 经过变形的各种树的问题就易解。从而总结出用递归进行程序设计的规律和方法。

【指导说明】:⑴ 、分析每个图形的最基本图形。⑵ 、确定海龟起始的位置与方向。⑶ 、找出上下层 “递归” 插入

点。⑷ 、先编写出最底层的图形过程。⑸ 、执行过程确定图形正确无误。⑹ 、逐一插入 “递归” 步步为

营。

Page 9: Logo 程序设计

第二步:编写基本三角形 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 90END

Page 10: Logo 程序设计

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 90END

? SJ 100 ↙

逐一添加“递归”与“调整”

LT 30 SJ :B/2 RT 30

RT 30 SJ :B/2 LT 30

LT 30 RT 30SJ :B/2

IF :B<10 STOP

30°

第三步:在上面的过程基础上,逐一插入“递归”命令行。

? SJ 100 ↙ ? SJ 100 ↙ ? SJ 100 ↙

Page 11: Logo 程序设计

⑵ 、在操作中学:再以“递归”插入点直接画出上图形。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 120END

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 90END

? DRAW RT 30 SJA 100 ↙ ? DRAW SJB 100 ↙

Page 12: Logo 程序设计

动脑筋,画一画

⑴ ⑵ ⑶ ⑷

⑸ ⑹ ⑺ ⑻

⑼ ⑽ ⑾ ⑿

Page 13: Logo 程序设计

三、多阶递归过程在一个递归过程体中进行了若干种不同级的递归调用。

1 、在操作中学:画出右图所示图形。TO D :B FD :B LT 45 RT 45 RT 45 LT 45 BK :BEND

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 :BEND

? FS DD 8 100 0.65↙

? D 100↙ 【说明】: :N 是级数参数, :B 是尺寸参数, :J 是相邻两级树的尺寸比例参数。

Page 14: Logo 程序设计

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-2END

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 :BEND

? DSC 50 30 0↙

? DSC 50 30 5↙

? DSC 50 30 10↙

【说明】: :B 是树干尺寸参数, :A 是相邻两树叉夹角参数, :S 是风力大小参数。

? DSB 100 5↙

Page 15: Logo 程序设计

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/2END

TO YUAN :R REPEAT 360[RT 0.5 FD :R*PI/180 RT 0.5]END

? SJG 100 60 ↙

Page 16: Logo 程序设计

4 、想一想:在下面过程中插入“递归”,画出的图形怎样?

TO J2 :B IF :B<10 STOP REPEAT 3[FD :B RT 120 J2 :B/2]END

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

Page 17: Logo 程序设计

动脑筋,画一画

⑴ ⑵ ⑶ ⑷

⑸ ⑹

Page 18: Logo 程序设计

动脑筋,画一画

⑺ ⑻ ⑼ ⑽

?HW11 0 30

?HW11 1 20

?HW11 2 10

?HW11 3 5

?HW12 50 1 1

?HW12 50 1 2

?HW12 50 1 3

?HW12 20 2 1

?HW12 20 3 1

?HW12 10 4 1