8. Rekursio.

Slides:



Advertisements
Samankaltaiset esitykset
Tuloksellinen Java-ohjelmointi Luku 3 Luokkien käyttäminen
Advertisements

15. Loogiset operaatiot.
Olio-ohjelmoinnin perusteet luento 3: Muuttujista ja funktioista Sami Jantunen LTY/Tietotekniikan osasto.
1 Ehtolausekkeet Ehdot, valintalausekkeet Boolean-algebra.
Tietorakenteet ja algoritmit
Nämä kalvot on lisensoitu Creative Commons Attribution-ShareAlike 1
521144A, Algoritmit ja Tietorakenteet, syksy 2013
Sovellusohjelman suunnittelu & toteutus
Valitse seuraaviin vaihtoehtotehtäviin oikea vastaus…
Java-ohjelmointi Opas ammattimaiseen osaamiseen Luku 4 Toistolauseet
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
Yksinkertaiset graafiset syöttö- ja tulostustoiminnot.
RSA – Julkisen avaimen salakirjoitusmenetelmä Perusteet, algoritmit, hyökkäykset Matti K. Sinisalo, FL.
© Jukka Harju, Jukka Juslin Java-ohjelmointi Opas ammattimaiseen osaamiseen Luku 9 Poikkeuskäsittely.
Toiston tekeminen Javalla  Mikä toistorakenne on?  while toistorakenne  do-while toistorakenne  for toistorakenne 1.
Ohjelmoinnin tekniikkaa Sisällys for -lause lyhemmin. Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely.
Pseudokoodi Tietokoneohjelmien perusidea:
© Jukka Harju, Jukka Juslin
ict1td002 - Copyright Raine Kauppinen 1 Alkuarvot ja tyyppimuunnokset (1/5)  Aiemmin olemme jo antaneet muuttujille alkuarvoja, esimerkiksi: int.
String-vertailusta ja Scannerin käytöstä (1/2)
2.7 Rekursio ja iteraatio Algoritminen ongelmanratkaisu ei ole
Metodit – Arvotyyppi Ellei metodi palauta arvoa, sen arvotyyppi on void Tällöin ”return;”-lauseke ei ole metodissa pakollinen, vaikka sen käyttö on sallittua.
11. Javan toistorakenteet
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
Hyvä ohjelmointitapa (osa 2) Yleistä Lisää hyviä ohjelmointikäytäntöjä: − Jaa pitkä koodi osiin. − Käytä attribuutteja säästeliäästi.
3.2 Kompleksisuus Vain pieni osa kaikista tehtävistä on laskettavissa tai edes osittainkaan laskettavissa. Laskettavien osalta saattaa olla tarpeellista.
22. Taulukot.
RAKENNUSPALIKOITA SEINÄJOEN KANSALAISOPISTO Jussi Rasku Aki Sirviö.
Rinnakkaisuus Järjestelmässä, jossa voi olla useita prosesseja rinnakkain suorituksessa voi tulla tilanteita, joissa prosessien suoritusta täytyy kontrolloida.
Olioiden taulukointi Perustaulukon käyttö Luokan ilmentymät voidaan tallettaa taulukkoon samoin kuin muuttujat Esimerkki talletetaan taulukkoon opintojaksojen.
Antti-Jussi Lakanen Nuorten peliohjelmointi 2009 / Jyväskylän yliopisto.
1 © Jukka Juslin Luokat, attribuutit ja metodit Yleistietoa: seuraavalla koulutusviikolla tarkempi käsittely.
14. Poikkeukset Sisällys Johdanto poikkeuksiin. Poikkeusten käsittely: − Poikkeusten käsittely paikallisesti. − Poikkeusten heittäminen. Exception.
15. Ohjelmoinnin tekniikkaa
21. Rekursio.
FOR i := 0...N-1 DO summa := summa + A[i] tulo := tulo * A[i] ENDFOR.
Ohjausrakenteet Määräävät ohjelmakoodin suoritusjärjestyksen Ehtolause if – else on muotoa if (lauseke) lause1 else lause2 Jos lauseke on tosi, niin suoritetaan.
Hajoita ja hallitse (divide and conquer) Pikalajittele n-alkioinen taulukko 1. Divide: Jaetaan taulukko kahdeksi alitaulukoksi tukialkion (pivot) x suhteen:
Ohjelmassa tänään Ohjelmointimallit Pseudokieli Modulaarisuus.
Sisältötuotanto ActionScript Anssi Jääskeläinen VO: Tiistaisin 6606.
Taas laskin TIES341 Funktio-ohjelmointi 2 Kevät 2006.
String-vertailusta ja Scannerin käytöstä (1/2)
Konformaatioisomeria
1. Omat operaatiot.
Funktio-ohjelmointi ja Java
8. Näppäimistöltä lukeminen
4. Komentoriviparametrit
7. Hyvä ohjelmointitapa..
13. Loogiset operaatiot.
Määritä särmiön tilavuus
3. Luokat, oliot ja metodit Java-kielessä (Lausekielinen ohjelmointi I ja II –kursseilla opitun kertausta.)
15. Lohkot.
7. Näytölle tulostaminen
9. Aritmeettiset operaatiot
8. Näppäimistöltä lukeminen
16. Ohjelmoinnin tekniikkaa
11. Javan valintarakenteet
12. Javan toistorakenteet
15. Lohkot.
12. Javan toistorakenteet
6. Metodit.
3. Komentoriviparametrit
8. Rekursio.
15. Ohjelmoinnin tekniikkaa
7. Hyvä ohjelmointitapa..
5. Aliohjelmien toteutus
13. Loogiset operaatiot.
12. Javan toistorakenteet
Jakso 4 Aliohjelmien toteutus
16. Ohjelmoinnin tekniikkaa
Esityksen transkriptio:

8. Rekursio

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.

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

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;

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