14.Rekursion
In der Lektion "Die Schildkröte lernt" haben wir gesehen, wie wir der Schildkröte neue Wörter beibringen können, indem wir den Befehl lerne verwenden. Wir können der Schildkröte auch einen neuen Befehl beibringen, indem wir lerne gefolgt von einem Parameter verwenden, z.B.: lerne voran :PARAM_NAME vw :PARAM_NAME ende. Die Schildkröte wird nun erwarten, einen Parameter (einen Wert) zu erhalten, nachdem sie den neuen Befehl "voran" erhalten hat. Zum Beispiel: voran 40.
Bringen Sie der Schildkröte das neue Wort voran bei, mit einem Parameter namens wieweit.
Wie wir im vorherigen Schritt gesehen haben, können wir der Schildkröte Aktionen beibringen, bei denen sie Parameter (Werte) erwartet. Wie wir in vorhergehenden Lektionen gesehen haben, bringen wir der Schildkröte mit folgenden Befehlen bei, ein Quadrat zu zeichnen: lerne quadrat wiederhole 4 [vw IRGENDEINE_ZAHL rs 90] ende.
Bringen Sie der Schildkröte den Befehl quadrat bei. Lassen Sie die Schildkröte dabei einen Parameter grösse erwarten. Der Parameter grösse bestimmt die Größe des Quadrats.
Wir haben bereits einen neuen Befehl namens quadrat erstellt, der einen Parameter erwartet. Lassen Sie uns überprüfen, ob er funktioniert. Sie können den Befehl quadrat 60 oder den Befehl quadrat 80 usw. eingeben.
Geben Sie den Befehl quadrat 100 ein.
Wenn ein Befehl sich selbst aufruft, wird dieser Prozess 'Rekursion' genannt. Bei der Rekursion müssen wir eine Stop-Bedingung haben (wir wollen keine Endlosschleife) und einen Aufruf für einen Befehl mit neuen Parametern. Klingt kompliziert? Keine Sorge, wir werden es Schritt für Schritt durchgehen. Bringen wir der Schildkröte nun den quadrat Befehl bei, indem wir die Rekursion verwenden.
Geben Sie folgende Befehle ein: lerne quadrat :grösse if :grösse > 90 [stop] wiederhole 4 [vw :grösse rs 90] quadrat :grösse + 20 ende
Wie funktioniert die Rekursion? Zuerst rufen wir den Befehl quadrat 40 auf. Das bedeutet, dass der Parameter :grösse innerhalb des Befehls quadrat den Wert 40 erhält. Dann verwenden wir die if-Bedingung. Damit fragen wir die Schildkröte: Ist der Wert von :grösse größer als 90 (:grösse > 90)? Wenn ja, dann stoppe das Programm ([stop]). Wenn nein, dann folge diesen Anweisungen: Zeichne ein Quadrat mit dem Parameter :grösse. Rufe das Quadrat nochmal auf mit :grösse = :grösse + 20. Jetzt ist der Parameter :grösse 60. Er ist immer noch < 90, also zeichne das Quadrat mit der Größe 60 und rufen das Quadrat nochmal mit :grösse = :grösse + 20 auf. Nun ist der Parameter :grösse 80, was immer noch weniger als 90 ist, so dass die Schildkröte ein Quadrat mit der Größe 80 zeichnet und das Quadrat nochmal mit :grösse=:grösse+20 aufruft. Jetzt ist :grösse 100 > 90, so dass der stop-Befehl aufgerufen wird und das Programm beendet wird.
Geben Sie den Befehl quadrat 40 ein.
Nun soll die Schildkröte einen neuen Befehl spirale lernen. Die Spirale erhält einen Parameter namens :grösse. Die Stop-Bedingung wird sein, wenn :grösse > 30 ist. Bei jedem Aufruf gehen wir vorwärts entsprechend dem Parameter grösse vw :grösse und drehen dann 15 Grad nach rechts rs 15. Zuletzt rufen wir wieder die Spirale auf, mit :grösse * 1.02 (dadurch wird die Spirale nach außen immer breiter, wie ein Schneckenhaus).
Bringen Sie der Schildkröte bei, was eine Spirale ist.