[<lauseke1> if <ehto> else <lauseke2> for alkio in sarja]
Esimerkiksi
Kooste ja merkkijonot
Iteroitava sarja voi olla
myös esimerkiksi
merkkijono:
Kooste ja merkkijonot, join-metodi
Erityisen näppärää, kun yhdistetään join-metodi
Kooste, join ja split
Omat oliot koosteissa
Kooste ja sanakirja
Funktioiden väliset kutsut
Funktiot voivat kutsua itseään
Tästä seuraa kuitenkin "ikuinen" silmukka:
Rekursio
Funktio kutsuu itseään
muuttuvalla syötteellä
kunnes lopetusehto
täyttyy
Rekursio ja paluuarvot
Mutatoitumattomat arvot pitää palauttaa rekursiivisesta funktiosta:
Esimerkki: Fibonacci
def fibo(n: int):
if n <= 2:
return 1
return fibo(n - 1) + fibo(n - 2)
Luvuille 1 ja 2 algoritmi palauttaa arvon 1 ehdon n <= 2
mukaisesti.
Luvulle 3 algoritmi palauttaa arvon lausekkeesta fibonacci(n -
1) + fibonacci(n - 2), eli käytännössä lausekkeen fibonacci(2)
+ fibonacci(1). Koska edellisessä kohdassa huomattiin, että
näiden molempien arvo on 1, palauttaa funktio siis arvon 1 + 1
== 2 (joka onkin kolmas Fibonaccin luku)
Luvulle 4 algoritmi palauttaa arvon lausekkeesta fibonacci(3) +
fibonacci(2), mikä edellisten kohtien perusteella on siis 2 + 1
eli 3.
Luvulle 5 algoritmi palauttaa arvon lausekkeesta fibonacci(4) +
fibonacci(3), mikä edellisten kohtien perusteella on siis 3 + 2
eli 5.
Miksi ja koska rekursio?
Erityisen hyödyllinen, kun
käsitellään luonnostaan
rekursiivisia rakenteita
Esim. puut, graafit, jne.
Usein vaikea hahmottaa ensi
alkuun
Ensi viikolla
Funktiot parametreina
Lambda-lauseke
Generaattorifunktiot
Funktionaalista ohjelmointia: map, filter, reduce
Säännölliset lausekkeet