On this page:
3.1.1 Rekursiiviset kuvatehtävät
3.1.2 Epäkesko
3.1.3 Fraktaalit
6.4

3.1 Rekursio

Rekursio alkeistapauksella, kesto 11:44

Tietokoneen voima on siinä, että se jaksaa toistaa samaa asiaa monta kertaa. Yksi tapa toteuttaa silmukoita on rekursiiviset funktiot. Ne ovat funktioita, jotka kutsuvat itse itseään. Jotta silmukasta päästään joskus ulos, tarvitaan ehtolausetta.

Rekursio akkumulaattorilla, kesto 8:16

Harjoittele rekursiivisten funktioiden tekemistä näiden tehtävien avulla.

3.1.1 Rekursiiviset kuvatehtävät

Rekursiiviset kuvatehtävät

Tee funktio, joka tuottaa oheisen kuvan mukaisia tikkatauluja rekursion avulla.

Tee funktio, joka oheisen kuvan mukaisia ruudukoita. Vinkki: Tee ensin rivejä tuottava funktio.

Tee funktio, joka tuottaa oheisen kuvan mukaisen sarjan palloja.

Tässä harjoituksessa saatat tarvita seuraavia Racket-kielen tai 2htdp-image -kirjaston funktioita:

circle

   

square

   

overlay

   

beside

   

above

overlay/xy

   

place-image

   

rotate

   

empty-scene

   

*

/

   

+

   

-

   

add1

   

sub1

if

   

<

   

>

   

<=

   

>=

Opettajan diat.

3.1.2 Epäkesko

Oheinen kuva on saatu aikaan laittamalla yksi ympyrä kuvan vasempaan reunaan ja pyörittämällä näin saatua "epäkeskoa" kuvaa rekursiivisen funktion avulla ja kokoamalla kierrokset yhdeksi kuvaksi. Kokeile saatko tehtyä samanlaisen. Kokeile myös samaa ideaa muulaisilla kuvilla.

 

Epäkesko (DrRacket)

 

Epäkesko (WeScheme)

Tässä harjoituksessa saatat tarvita seuraavia Racket-kielen tai 2htdp-image -kirjaston funktioita:

circle

   

overlay

   

rotate

   

*

   

/

+

   

-

   

add1

   

sub1

   

if

<

   

>

   

<=

   

>=

   

check-expect

3.1.3 Fraktaalit

Rekursion avulla voit toteuttaa myös fraktaaleja, kuten kuvan Sierpinskin kolmio.

Tutustu oheiseen koodiin ja muuta se tekemään Sierpinskin neliöitä.

 

Sierpinski (DrRacket)

 

Sierpinski (WeScheme)

Tässä harjoituksessa saatat tarvita seuraavia Racket-kielen tai 2htdp-image -kirjaston funktioita:

triangle

   

square

   

above

   

beside

   

if

   

overlay/xy

<

   

>

   

<=

   

>=

   

sub1

   

let