Rekursioon Rekursiooni puhul kutsub alamprogramm ennast ise uuesti välja. Sellist võimalust kasutatakse juhul, kui ülesandes sisaldub alamülesanne, mis on eelmisega sarnane, kuid teistsuguste (enamasti vähemate) andmete või mahuga. Järgnevas näites trükib alamprogramm arvurea soovitud arvuni. Selleks piisab, kui trükitakse etteantud suurim arv ning edasi palutakse trükkida rida kuni eelmise arvuni. procedure trykiEelnevRida(arv: integer); begin write(arv, ' '); if arv>1 then trykiEelnevRida(arv-1); end; begin trykiEelnevRida(8); end. Rekursioonil peab olema olukord, kus alamprogrammi enam uuesti välja ei kutsutaks. Siin on tingimuseks, et eelnev rida palutakse trükkida ainult juhul, kui arv on suurem ühest. St. et kui palutakse trükkida rida kuni üheni, siis trükitaksegi vaid too 1 ning ei midagi rohkemat. Ülesandeid * Muuda programmi nõnda, et rida trükitakse alates ühest kuni soovitud arvuni. * Trüki arvud üle ühe kuni soovitud arvuni. * Leia arvude summa kuni soovitud arvuni. Proovi kahel moel: * Summana hoitav arv on globaalmuutuja * Seni arvutatud summa tagastatakse funktsioonist * Leia sarnaselt arvude korrutis soovitud arvuni (faktoriaal) Jaga ja valitse Mitmedki ülesanded muutuvad lahendatavaks, kui suuta nad jagada alamülesanneteks. Ning vajadusel need omakorda alamülesanneteks. Proovige sama läbi vähima leidmise juures. * Koosta globaalmuutujana massiiv kümnekonna arvuga. * Koosta alamprogramm, millele antakse ette massiivi kaks elemendi järjekorranumbrit. * Kui järjekorranumbrid on võrdsed, siis tagastatakse vastaval kohal olev väärtus * Kui tegemist on kõrvuti asetsevate järjekorranumbritega, siis leitakse vastavate elementide väärtustest vähim ja tagastatakse see * Muul juhul jagatakse etteantud vahemik pooleks. Kummagist poolest vähima otsimiseks kutsutakse välja see sama alamprogramm. Tagastatakse väärtus, mis oli saadud väärtustest väikseim. Võrdluseks oleks nagu seltskonna inimestega kuhjast vähima kartuli leidmine. Üks jagab suure hunniku väikestesse kuhjadesse ning määrab igale kuhjale inimese, kes sealt vähimat leidma peab. Kes tunneb, et talle pandud ülesanne liialt suur on, jaotab kuhja omaette väiksemateks ning määrab igale kuhjale inimese, kes taas sealt vähima leidma peab. Igast kuhja uurija viib sealt leitud kartuli oma "ülemuse" kätte. Tema omakorda otsib saabunud kartulitest vähima ning viib oma ülemusele. Lõpuks on töö alustajal vaja võrrelda vaid talle saabunud kartulite hulgast. Ning ta saabki vähima kätte. Sest juhul, kui keegi sohki ei teinud, siis kõige väiksem kartul jääb iga võrdluse puhul kõige väiksemaks. Kel tunduvad eelpakutud ülesanded liialt lihtsad ja tuttavad olema, võtke kohe ette olümpiaadiülesanne: ftp://ftp.ttkool.ut.ee/comp/olymp/io05v1aey.pdf 2. Ratsukäik ftp://ftp.ttkool.ut.ee/comp/lahv/ilv02eye.rtf 3. Reis ümber saare.