Rekursio

Aliohjelma voi kutsua myös itseään. Tehdään aluksi aliohjelma, joka piirtää ympyrän. Aliohjelmaan välitetään ympyrän keskipiste ja säde, jonka jälkeen ohjelma piirtää ympyrän ikkunan keskelle.

SANALLINEN ALGORITMI
  1. Aseta ikkunan kooksi 400 px vaakaan ja 400 px pystyyn.
  2. Aseta ikkunan taustaväriksi valkea.
  3. Aseta asetus, joka poistaa piirroskuvioista täytön.
  4. Aseta asetus, joka toistaa pääohjelmaa eli void draw ()-lohkoa vain kerran.
  5. Kutsu aliohjelmaa: ympyra. Välitä aliohjelmalle ympyrän keskipiste (200,200) ja säde 200.
  6. Aloita aliohjelma ympyra (Määrittele kokonaislukumuuttujat x, y ja r).
    1. Piirrä ympyra komennolla: ellipse(x,y,2*r,2*r);, missä ympyrän keskipiste on (x,y) ja ympyrän leveys on 2*r ja ympyrän korkeus on 2*r.

// Ohjelman tehnyt e-Oppi Oy
// 30.8.2017
void setup() {
size(400, 400); // Ikkunan koko
background(255); // Taustaväri valkoinen
noFill(); // Ei täyttöä
noLoop(); // Pääohjelma toisetaan vain kerran
}
void draw() {
ympyra(200,200,200); // Kutsutaan aliohjelmaa
}
void ympyra(float x, float y, float r) {
ellipse(x, y, r*2, r*2);
}

Ohjelma tulostaa nyt yhden ympyrän. Ympyrän keskipiste on (200, 200) ja säde on 200.



Lisätään aliohjelmaan kutsu, joka kutsuu itseään. Jotta ohjelma ei joudu ikuiseen silmukkaan, niin lisätään ohjelmaan laskuri, jonka avulla voimme määrätä kutsujen määrän.

SANALLINEN ALGORITMI
  1. Määritellään kokonaislukumuuttuja a ja annetaan sille alkuarvo 1.
  2. Aseta ikkunan kooksi 400 px vaakaan ja 400 px pystyyn.
  3. Aseta ikkunan taustaväriksi valkea.
  4. Aseta asetus, joka poistaa piirroskuvioista täytön.
  5. Aseta asetus, joka toistaa pääohjelmaa eli void draw ()-lohkoa vain kerran.
  6. Kutsu aliohjelmaa: ympyra. Välitä aliohjelmalle ympyrän keskipiste (200, 200) ja säde 200.
  7. Aloita aliohjelma ympyra (Määrittele kokonaislukumuuttujat x, y ja r).
    1. Kasvata muuttujan a arvoa yhdellä.
    2. Piirrä ympyra komennolla: ellipse(x,y,2*r,2*r);, missä ympyrän keskipiste on (x,y) ja ympyrän leveys on 2*r ja ympyrän korkeus on 2*r.
    3. Jos muuttujan a arvo on pienempi tai yhtä suuri kuin 100, niin silloin
    4. kutsu aliohjelmaa ympyra. Välitä aliohjelmalle ympyrän keskipiste (x, y) ja säde r*0.9. Nyt aliohjelma kutsuu itseään, niin että samalla säteen arvo pienenee 10 % eli menee 0.9-kertaiseksi.

// Ohjelman tehnyt e-Oppi Oy
// 30.8.2017
int a = 1;
void setup() {
size(400, 400); // Ikkunan koko
background(255); // Taustaväri valkea
noFill(); // Ei täyttöä
noLoop(); // Ei toistoa
}
void draw() {
ympyra(200, 200, 200);
}
void ympyra(float x, float y, float r) {
a++;
ellipse(x, y, r*2, r*2);
if (a <= 100) { // Sata toistoa
ympyra(x, y,r*0.9); // Aliohjelma kutsuu itseään
}
}



Koska aliohjelman kutsussa on r*0.9, kutsuttavan ympyrän säde kutistuu 10 % eli menee 0,9-kertaiseksi. Laskuri pitää huolen siitä, että piirrettäviä ympyröitä on 100 kappaletta. Jos laskuria ei olisi, niin todennäköisesti ohjelma joutuisi ikuiseen silmukkaan ja ohjelman suoritustilan jumittumiseen.