Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

8. Rekursio.

Samankaltaiset esitykset


Esitys aiheesta: "8. Rekursio."— Esityksen transkriptio:

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


Lataa ppt "8. Rekursio."

Samankaltaiset esitykset


Iklan oleh Google