Lataa esitys
Esittely latautuu. Ole hyvä ja odota
1
8. Rekursio
2
Johdanto Rekursiivinen operaatio kutsuu itseään.
Rekursio etenee askelittain “alaspäin” kunnes kohdataan alkeistapaus (base case), joka voidaan ratkaista. Tämän jälkeen palataan “ylöspäin” yhdistäen kussakin askeleessa tehtyjen rekursiivisten kutsujen tulokset. Rekursion avulla voidaan ratkaista vaikeitakin ongelmia yksinkertaisesti. Käytetään esimerkiksi lajittelualgoritmeissa. Rekursio on haastava ohjelmointitekniikka. Ikuinen rekursio mahdollinen. Rekursio on laskennallisesti tehoton menetelmä. Luonteva ratkaisu vain osaan ongelmista.
3
Esimerkki Tarkastellaan esimerkkinä luvun n kertoman n! (n ≥ 0) laskemista sekä iteratiivisesti että rekursiivisesti . Määritellään erikoistapaukset: 0! = 1 ja 1! = 1. Iteratiivinen ratkaisu: n! = n (n - 1) (n - 2) … 1 5! = 5 4 3 2 1 = 120 Rekursiivinen ratkaisu: n! = n (n - 1)! 5! = 5 4! = 5 4 3! = 5 4 3 2! = 5 4 3 2 1! = 5 4 3 2 1 = 120
4
Esimerkki /* Lasketaan luvun n kertoma iteratiivisesti. */
public static int laskeKertoma(int n) { // 0! = 1 ja 1! = 1. int kertoma = 1; // Silmukoidaan, jos n > 1. while (n > 1) { // Päivitetään tuloa ja tuotetaan seuraava kerrottava. kertoma = kertoma * n; n = n - 1; } // Palautetaan tulos. return kertoma;
5
Esimerkki /* Lasketaan luvun n kertoma rekursiivisesti. */
public static int laskeKertoma(int n) { // Käytetään perustapauksena // luvun 1 kertomaa. if (n <= 1) return 1; // Palautetaan rekursiivisen kutsun tulos // luvulla n kerrottuna. else return n * laskeKertoma(n - 1); } 5! 5 4! 4 3! 3 2! 2 1! 1 2 1 = 2 5 24 = 120 4 6 = 24 3 2 = 6 5! = 120
Samankaltaiset esitykset
© 2024 SlidePlayer.fi Inc.
All rights reserved.