14. praktikumi harjutused
0. Sügavus
Kirjuta rekursiivne funktsioon sügavus, mille parameetriks on listide list (st listi elementideks on listid, mille elementideks võivad omakorda olla listid jne) ning mis tagastab selle struktuuri sügavuse – see tähendab, mitu taset liste on välimise listi sees maksimaalselt.
Näide.
>>> sügavus([]) 0 >>> sügavus([[],[]]) 1 >>> sügavus([[],[[[[]],[]],[]]]) 4
1. Ekstravertne kuusnurk
Kirjuta rekursiivne funktsioon, mis joonistab taolise fraktali:
![](https://courses.cs.ut.ee/2021/programmeerimine/fall/Main/Praks14?action=download&upname=ekstravertne_kuusnurk.png)
2. Failipuu
Kirjuta rekursiivne funktsioon, mis kuvab ekraanile etteantud kausta sisu „failipuu” kujul, nt
c:\muusika eesti_muusika jäääär Supilinn.mp3 Punased_kardinad.mp3 Ehala Jahikoera_armuulg.mp3 Lambalaul.mp3 Päikeseratas.mp3 Amelie Le Banquet.mp3 Au Quai.mp3 track01.mp3 track12.mp3
Vihje: rekursiivsetel väljakutsetel pea arvet ka selle üle, kui „sügaval” töötlemisjärg algse kausta suhtes asub – selle järgi saab panna paika õige taande.
Vihje: siin on täiesti võimalik ja soovitatavgi kombineerida omavahel tsüklit ja rekursiooni.
3. Suurima faili leidmine
Kirjuta rekursiivne funktsioon, mille parameetriks on kausta nimi ja mis tagastab kõige suurema selles kaustas (või mõnes alamkaustas) leiduva faili nime ja suuruse (st funktsioon peab tagastama paari ehk 2-elemendilise enniku).
Vihje:
import os suurus = os.path.getsize(failinimi)
4. Introvertne ruut
Kirjuta rekursiivne funktsioon taolise fraktali joonistamiseks:
![](https://courses.cs.ut.ee/2021/programmeerimine/fall/Main/Praks14?action=download&upname=introvertne_ruut2.png)
5. Labürint
Labürint on antud mitmerealise sõnena, kus sümbol # tähistab seina ja tühik tähistab vaba ala, nt
labürint = ''' ############# # ## # # # ### ## ## # # ### ## # # # ##### # # ### # ############# '''
Kirjuta rekursiivne funktsioon, mille parameetriteks on suvaline labürint, lähtepunkti koordinaadid ja sihtpunkti koordinaadid ning mis tagastab järjendina sammud, mille abil on võimalik jõuda lähtepunktist sihtpunkti.
Küsimus: millist situatsiooni saab käsitleda baasjuhtumina?
Vihje: astu samm läbiuurimata suunas ja lahenda sama ülesanne uuest lähtepunktist. Lõpmatu korduse vältimiseks tuleks pidada meeles juba läbi uuritud kohtade loetelu.
Lisa: proovi panna Pykkar labürindist teed leidma.