230 likes | 481 Views
Logo 程序设计. ( 授课讲稿 ) 吴剑辉. 第四讲 简单递归. 我们知道,已定义的过程名可视为新的命令直接来执行;另外,还可以在一个过程中允许使用已定义的过程,即过程的嵌套调用。如果在一个过程体的末尾出现自身过程名,这是一种特殊的过程调用方式。称之为调用自身 “ 命令 ” ,叫做尾部递归。. 一、什么是尾递归. 二、用尾递归画图. 三、进入色彩世界. 一、什么是尾递归. 1 、对比分析:以画一个边长为 100 的正方形为例。. 用重复命令编写: REPEAT 4[ FD 100 RT 90 ]. 尾部递归过程编写: TO ZFX
E N D
Logo程序设计 (授课讲稿) 吴剑辉
第四讲 简单递归 我们知道,已定义的过程名可视为新的命令直接来执行;另外,还可以在一个过程中允许使用已定义的过程,即过程的嵌套调用。如果在一个过程体的末尾出现自身过程名,这是一种特殊的过程调用方式。称之为调用自身“命令”,叫做尾部递归。 一、什么是尾递归 二、用尾递归画图 三、进入色彩世界
一、什么是尾递归 1、对比分析:以画一个边长为100的正方形为例。 用重复命令编写:REPEAT 4[FD 100 RT 90] 尾部递归过程编写:TO ZFX FD 100 RT 90 ZFX END 相同点:两种方式编写,海龟都要以“FD 100 RT 90”作图,并重 复出现。 不同点:重复命令是有限的重复,根据设定的重复次数(4 次)来 执行。而尾部递归是无限的重复,每当调用到 ZFX时,又 作为命令执行,并反复进行。 说 明:递归过程不能自动停下来,只能用Ctrl+G组合键强行终止 或操作工具栏相关功能图标。最好在设计递归过程时,通 过设置条件使其自动停止。
2、线段的奇妙变幻。(分析下列编程所画出的图形变化)2、线段的奇妙变幻。(分析下列编程所画出的图形变化) ⑴、TO ZHX1 :X :N RT :N FD :X END ⑵、TO ZHX2 :X :N RT :N FD :X ZHX2 :X :N END ⑶、TO ZHX3 :X :N IF :X>200 STOP RT :N FD :X ZHX3 :X+5 :N END ? ZHX1 100 0 ? ZHX1 100 90 ? ZHX2 100 90 ? ZHX2 100 144 ? ZHX3 100 90 ? ZHX3 100 144 ⑷、TO ZHX4 :X :N :M IF :X>200 STOP RT :N FD :X ZHX4 :X+:M :N :M END ⑸、TO ZHX5 :X :N :M RT :N FD :X WAIT 50 ZHX5 :X :N+:M :M END ? ZHX5 15 3 10 ? ZHX5 20 2 10 ? ZHX5 20 3 100 ? ZHX4 0 118 2 ? ZHX4 0 61 0.4 ? ZHX4 100 144 0.4
【知识点】:控制判断命令 说明:条件都用“比较算式”表示。常用的“比较符号”有: ⑴、> 大于;⑵、< 小于;⑶、= 等于; ⑷、>= 大于或等于(“=>”和“>=”的意义是相同的); ⑸、<= 小于或等于(“=<”和“<=”的意义是相同的)。 在递归过程中,常根据实际的需要,对参数进行加(+)、减(-)、乘(*)、除(/)的运算,最后画出各种有趣的图形来。 在实践中,我们将会发现有时候所写的过程,执行结果并没有按照我们所期望的去做。这种“意外的发现 ”正是促使你去思考、去探索、去尝试更多的创造。
动脑筋,画一画 用上述编写的递归过程,试输入实际参数,分别画出下列图形。
二、用尾递归画图 1、用尾部递归方式,画出如图所示的五个连续正方形。 TO ZF1 :X :N IF :N<1 STOP REPEAT 4[FD :X RT 90] RT 90 FD :X LT 90 ZF1 :X :N-1 END 执行: ?ZF1 20 5↙ 这里以正方形的个数来计算,运用“递减器”。 也可运用“累加器”。即: TO ZF2 :X :N IF :N>4 STOP REPEAT 4[FD :X RT 90] RT 90 FD :X LT 90 ZF2 :X :N+1 END 对照一下,执行过程时,哪一种形式较方便?(画8个、10个呢 ?) 同时要注意条件的设定! 执行: ?ZF2 20 0↙
2、在操作中认识变幻规律 与“重复命令”编写类同。注意分析海龟的位置和方向的不同变化,规律性大致有四种基本组合图形。 ⑴、位置不变、方向改变。 TO ZFX12 :B :N IF :N<1 STOP REPEAT 4[FD :B RT 90] RT 90 ZFX12 :B/2 :N-1 END ? ZFX12 100 4 TO ZFX11 :B :N IF :N<1 STOP REPEAT 4[FD :B RT 90] RT 90 ZFX11 :B :N-1 END ? ZFX11 100 4
⑵、位置改变、方向不变。 TO ZFX21 :B :N TO ZFX22 :B :N IF :N<1 STOP IF :N<1 STOP REPEAT 4[FD :B RT 90] REPEAT 4[FD :B RT 90] FD :B FD :B ZFX21 :B :N-1 ZFX22 :B/2 :N-1 END END ? ZFX21 100 4 ? ZFX22 100 4
⑶、位置改变、方向也改变。 TO ZFX31 :B :N TO ZFX32 :B :N IF :N<1 STOP IF :N<1 STOP REPEAT 4[FD :B RT 90] REPEAT 4[FD :B RT 90] FD :B FD :B LT 90 LT 90 ZFX31 :B :N-1 ZFX32 :B/2 :N-1 END END ? ZFX31 100 4 ? ZFX32 100 4
⑷、位置不变、方向也不变。 TO ZFX41 :B :N TO ZFX42 :B :N IF :N<1 STOP IF :N<1 STOP REPEAT 4[FD :B RT 90] REPEAT 4[FD :B RT 90] ZFX41 :B :N-1 ZFX42 :B/2 :N-1 END END ? ZFX41 100 4 ? ZFX42 100 4
3、画超级葫芦串。 主过程: TO THL :R :M :N DRAW FS HT REPEAT :M[THL2 :R :N RT 360/:M] END ?THL 10 5 3 子过程: TO THL1 :R :N IF :N<1 STOP STAMPOVAL :R :R PU FD :R*2.2 PD THL1 :R*1.2 :N-1 END TO THL2 :R :N FD :R*2 PU FD :R PD THL1 :R :N PU SETXY [0 0] PD END ?THL 10 8 5
4、画树枝。 主过程: TO SHIZI :R :N IF :N<2 FD 0.5*:R SHY 90 :R STOP FD :R SHZ 90 :R SHIZI :R*0.8 :N-1 END 子过程: TO RHU :N :R REPEAT :N[FD :R*PI/180 RT 1] END TO SHY :N :R LT :N/2 REPEAT 2[RHU :N :R RT 180-:N] RT :N/2 END TO SHZ :N :R LT 60 REPEAT 2[SHY :N :R RT 120] RT 180 END ?DRAW FS HT SHIZI 100 2 ?DRAW FS HT SHIZI 50 8
动脑筋,画一画 ⑵ ⑶ ⑸ ⑴ ⑷ ⑼ ⑽ ⑻ ⑺ ⑹ ⒂ ⑾ ⑿ ⒀ ⒁
三、进入色彩世界 0-1-2-3-4-5-6-7-8-9-10-11-12-13-14-15 通过设置画笔与背景颜色、图形填色等方式和命令实现各种色彩缤纷的图案。 【知识点】:色彩命令 [色码说明]:海龟笔画、屏幕背景, 都可选择使用16种颜色。
【指导说明】 ⑴、刚进入LOGO系统时, 画笔颜色是黑色(色码为0);背景颜色是白色(色码为15);海龟笔宽的初始状态为1。 ⑵、涂色命令只能对已经被海龟线条封闭起来的图形填色;图形封闭线条的颜色必须和所填的颜色相同;开始填色时,必须使海龟抬笔进入封闭图形内,再落笔。 1、设置变幻背景 TO BJ :S IF :S>15 STOP SETBG :S WAIT 100 BJ :S+1 END ?DRAW FS BJ 0↙
2、画一个变幻的彩球(如右图)。 方法一: TO CQ1 :C IF :C>15 STOP SETPC :C PU LT 90 FD 100 RT 90 PD REPEAT 360[FD 100*PI/180 RT 1] PU RT 90 FD 50 PD FILL FD 50 LT 90 WAIT 50 CQ1 :C+1 END 方法二: TO CQ2 :C IF :C>15 STOP SETPC :C (STAMPOVAL 100 100 "TRUE) WAIT 50 CQ2 :C+1 END
3、画出一幅多彩七巧板 (如右图)。 TO QQB :B DRAW HT SETPC 9 RT 45 FD :B RT 135 FD :B*1.4142 RT 135 FD :B PU RT 135 FD :B/4 PD FILL PU BK:B/4 RT 45 PD SETPC 2 FD :B RT 135 FD :B*1.4142 RT 135 FD :B PU RT 135 FD :B/4 PD FILL PU BK :B/4 RT 135 PD SETPC 14 FD :B/2 RT 135 FD :B/2*1.4142 RT 135 FD :B/2 PU RT 135 FD :B/8 PD FILL PU BK :B/8 LT 45 PD SETPC 3 REPEAT 4[FD :B/2 LT 90] PU LT 45 FD :B/8 PD FILL PU BK :B/8 LT 45 FD :B/2 PD
SETPC 11 FD :B/2 RT 135 FD :B/2*1.4142 RT 135 FD :B/2 PU RT 135 FD :B/8 PD FILL PU BK :B/8 RT 45 FD :B/2 RT 45 PD SETPC 13 REPEAT 2[FD :B/2*1.4142 RT 90] RT 45 FD :B PU BK :B RT 22 FD :B/8 PD FILL PU BK :B/8 LT 22 PD SETPC 12 REPEAT 2[FD :B/2 LT 135 FD :B/2*1.4142 LT 45] PU LT 45 FD :B/8 PD FILL PU BK :B/8 RT 90 FD :B/2*1.4142 LT 90 PD SETPC 0 REPEAT 4[FD :B*1.4142 LT 90] PU HOME PD END
4、画出多层重叠的彩色正方形 (如右图,随机色彩)。 第一步: TO ZFD1 :B HT LT 90 REPEAT 4[FD :B/2 RT 90 FD :B/2] RT 90 END 第二步: TO ZFD2 :B IF :B<20 STOP SETPC RANDOM 14 PU FD 10 PD ZFD1 :B PU FD :B/2 PD FILL PU BK :B/2 PD ZFD2 :B-20 END ?DRAW FS ZFD2 200↙
5、画满天的星星。 TO XX :N IF :N<1 STOP MAKE "X 315-RANDOM 630 MAKE "Y 235-RANDOM 470 PU SETXY SE :X :Y PD SETPC RANDOM 15 WAIT 5 MAKE "P 4+RANDOM 21 MAKE "Q RANDOM 360 SETH :Q WJX :P XX :N-1 END TO MTXX :N DRAW FS HT XX :N END TO WJX :S REPEAT 5[FD :S LT 72 FD :S RT 144] PU RT 18 FD 4 PD FILL PU END
动脑筋,画一画 ⑷ ⑶ ⑴ ⑵ ⑻ ⑺ ⑹ ⑸ ⑾ ⑿ ⑽ ⑼