Recursie
description
Transcript of Recursie
RecursieSteve Dewanckele
http://studwww.ugent.be/~sdwancke/ailo/
Recursie (1)Wat doet de volgende procedure? to vierkant repeat 4 [fd 100 rt 90] vierkant endOpl.: Tekent oneindig aantal keer dezelfde vierkant doordat de procedure vierkant telkens naar zichzelf verwijst.
Recursie (2)Recursie is een proces dat verwijst naar zichzelf.Logo heeft procedures die zichzelf aanroepen terwijl ze zichzelf aanroepen Vgl: procedure vierkant roept zichzelf
aan terwijl procedure vierkant zichzelf (als procedure vierkant) aanroept
Recursie (3)Procedure vierkant wordt oneindig aantal keer aangeroepen. Hoe kan dit proces dan gestopt worden? De HALT-toets drukken
De computer te resetten De computer afzetten Stoppen met conditie
Recursie (4) Stoppen met conditieto vierkant :STAP
if :STAP > 150 [stop] repeat 4 [fd :STAP rt 90] vierkant :STAP + 5 end Stoppen met een toetsdruk (KEYP)
if keyp [stop]
Recursie (5)Komt de procedureoproep telkens op het einde van de procedure?Neen. Kan zowel: Begin Midden Einde
Recursie (6)Verschil tussen:
to cirkel :STRAAL if :STRAAL = 0 [stop] circle :STRAAL cirkel :STRAAL - 1 end
to cirkel :STRAAL if :STRAAL = 0 [stop] cirkel :STRAAL - 1 circle :STRAAL end
Oefening op recursieVlieger
Opgave
Opgave (2)
Opgave (3)• KORTEZIJDE: sqrt(2) * :X• LANGEZIJDE: sqrt((:X * :X) * (STAART *
STAART))
• HOEK:• ARCTAN (:X / :STAART)• ARCCOS (:STAART / :LANGEZIJDE)• ARCSIN (:X / :LANGEZIJDE)
http://studwww.ugent.be/~sdwancke/ailo/
Opgave (4)Oplossing
to boven :X local "KORTEZIJDE make "KORTEZIJDE (sqrt 2) * :X fd :KORTEZIJDE rt 90 fd :KORTEZIJDE end
Opgave (5)Oplossing
to onder :X :STAART local "LANGEZIJDE local "HOEK make "LANGEZIJDE sqrt ((:X * :X) + (:STAART *
:STAART)) make "HOEK ARCTAN (:X / :STAART) rt (45 + :HOEK) fd :LANGEZIJDE rt (180 - 2 * :HOEK) fd :LANGEZIJDE rt :HOEK end
Opgave (6)Oplossing
to vlieger :X :STAART :AANTAL local "STAP make " STAP :X / :AANTAL cs rt 45 omtrek :X :STAART lt 45 kader :X :STAART end
if (modulo :X :AANTAL) > 0 [pr [Aantal moet een deler zijn van de vliegerbreedte] stop]
Opgave (7)Oplossing
to omtrek :X :STAART boven :X onder :X :STAART pu rt 90 setpc random 500 fd :STAP lt 45 pd if :X = :STAP [stop] omtrek :X - :STAP :STAART end
Oefening Maansverduistering
Maansverduistering (1)Wat is dat? De aarde komt voor de zon te staan
waarbij de maan geen (of nauwelijks) zonlicht krijgt
Maansverduistering (2)
Opgave (1)Tekenen van de maansverduistering waarbij de straal van de maan wordt opgegevenExtra: tekenen van omgeving met sterren
Opgave (2)Hoe te werk gaan: Teken de maan in wit ([255 255 255]) Teken de aarde (of schaduw) waarbij kleur
hetzelfde is als de achtergrondkleur ([0 0 0]) Startpunt (xcor) zon is 2*STRAAL naar links Zon komt over aarde totdat xcor zon = 0
Procedures to maan :STRAAL to schaduw :STRAAL to maansverduistering :STRAAL
Opgave (3)Oplossing:
to maan :STRAAL pd circle :STRAAL if :STRAAL > 0 [maan :STRAAL - 1] end to schaduw :STRAAL circle :STRAAL setx xcor + 1 if xcor = 0 [stop] schaduw :STRAAL end
Opgave (4)to maansverduistering :STRAAL if :STRAAL < 6 [pr [Straal is te klein] stop] if :STRAAL > 100 [pr [Straal is te groot] stop] cs cleartext ht zetomgeving :STRAAL pr [Bezig met maan aan het tekenen...] maan :STRAAL pu setpc [0 0 0] setx -(2 * :STRAAL) pd cleartext pr [Hier komt de aarde...] schaduw :STRAAL home setpc [255 127 127] maan :STRAAL pr [Het is een maansverduistering !!]end
Lijst van nieuwe commando’s
Random getal Genereren van een willekeurg getal tussen
0 en getal-1Cleartext Schoonmaken van het tekstveld (onderaan
bij de commandolijn)Wiskundige berekeningen ARCCOS hoek ARCSIN hoek ARCTAN hoek
Extra oef (1)Gebruik recursie voor het maken van:
Extra oef (2)Oplossing
to blokken :HOOGTE :BREEDTE rechthoek :HOOGTE :BREEDTE if (:HOOGTE > 10) [blokken :HOOGTE - 10 :BREEDTE + 10] end
to rechthoek :HOOGTE :BREEDTE repeat 2 [fd :HOOGTE rt 90 fd :BREEDTE rt 90] end
Recursie + oefeningenNog vragen?