14. 遞歸

在”海龟的学习课程“这一课中,我们知道用命令”to“可以教海龟学会执行一个新的命令

我们也可以用命令”to“来教海龟学习参数,比如

to advance :thesize fd :thesize

现在,海龟接受了一个新的命令,它一定很想知道参数值是多少,比如:advance 40
让海龟学习一个新的命令“advance”,这个命令带有一个参数叫“thesize“

在上一步中,我们看到海龟学会了如何执行带参数的命令。在前面的课程中,我们也已经学过,为了教海龟画一个正方形,我们需要使用的命令格式是 to square repeat 4 [ fd SOME_NUMBER rt 90] end
教海龟用带参数的命令来画正方形,我们把参数设置为“size”,“size”的大小将决定正方形的大小

在上一步中,我们创建了一个带参数的新命令"square“,现在让我们来检验一下这个命令是否可以执行。你可以输入参数不同的命令,比如: square 60square 80

等等。
输入命令:square 100

当一个命令可以自我递增循环,我们就叫做递归命令

我们使用递归命令时,必须有一个停止条件(我们不希望无限循环命令)和带参数的命令。

是不是听上去很复杂?别担心,我们会一步一步来讲解。

现在我们先教海龟学习正方形递归命令。


教海龟执行如下的命令: to square :size if :size >90[stop] repeat 4 [ fd :size rt 90] square :size + 20 end

我们先看一下海龟执行命令square 40的情况

首先,我们来看一下命令square 40,这个命令表示square的参数值是40,。然后根据我们创建的条件命令“if”,我们要问问海龟:这个参数值大于90(:size > 90)吗?如果大于90,海龟需要停止执行命令;如果小于90,海龟要继续执行命令,画一个边长40的正方形

然后,海龟要执行递归命令 :size = :size + 20

现在,参数“size"值是60,60< 90,所以海龟要继续画一个边长60的正方形

然后,海龟执行递进命令 :size = :size + 20

现在,参数“size"值是80, 80< 90,所以海龟要继续画一个边长80的正方形,然后继续执行递进命令 :size = :size + 20

现在,参数“size"值是100,100> 90,这个时候海龟就会停止执行命令


输入命令:square 40
现在,让我们创建一个螺旋命令让海龟学习。这个螺旋命令有一个参数:size,停止命令是 :size > 30。海龟每一次都要遵循这个停止条件,然后右转15°,rt 15。命令的最后一步就是画一个螺旋:size * 1.02
教海龟学习画螺旋图
TurtleAcademy learn programming for freeYour browser is not supporting canvas We recomand you to use Chrome or Firefox browsers