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