Recursie

26
Recursie Steve Dewanckele http://studwww.ugent.be/ ~sdwancke/ailo/

description

Recursie. Steve Dewanckele http://studwww.ugent.be/~sdwancke/ailo/. Recursie (1). Wat doet de volgende procedure? to vierkant repeat 4 [fd 100 rt 90] vierkant end Opl.: Tekent oneindig aantal keer dezelfde vierkant doordat de procedure vierkant telkens naar zichzelf verwijst. - PowerPoint PPT Presentation

Transcript of Recursie

Page 1: Recursie

RecursieSteve Dewanckele

http://studwww.ugent.be/~sdwancke/ailo/

Page 2: Recursie

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.

Page 3: Recursie

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

Page 4: Recursie

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

Page 5: Recursie

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]

Page 6: Recursie

Recursie (5)Komt de procedureoproep telkens op het einde van de procedure?Neen. Kan zowel: Begin Midden Einde

Page 7: Recursie

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

Page 8: Recursie

Oefening op recursieVlieger

Page 9: Recursie

Opgave

Page 10: Recursie

Opgave (2)

Page 12: Recursie

Opgave (4)Oplossing

to boven :X local "KORTEZIJDE make "KORTEZIJDE (sqrt 2) * :X fd :KORTEZIJDE rt 90 fd :KORTEZIJDE end

Page 13: Recursie

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

Page 14: Recursie

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]

Page 15: Recursie

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

Page 16: Recursie

Oefening Maansverduistering

Page 17: Recursie

Maansverduistering (1)Wat is dat? De aarde komt voor de zon te staan

waarbij de maan geen (of nauwelijks) zonlicht krijgt

Page 18: Recursie

Maansverduistering (2)

Page 19: Recursie

Opgave (1)Tekenen van de maansverduistering waarbij de straal van de maan wordt opgegevenExtra: tekenen van omgeving met sterren

Page 20: Recursie

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

Page 21: Recursie

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

Page 22: Recursie

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

Page 23: Recursie

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

Page 24: Recursie

Extra oef (1)Gebruik recursie voor het maken van:

Page 25: Recursie

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

Page 26: Recursie

Recursie + oefeningenNog vragen?