21. 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.
© Hannu Laine 1 Tietorakenteet ja algoritmit Funktio-osoittimet Funktio-osoittimen ja taulukko-osoittimen vertailu Funktio-osoittimen käyttötapoja.
Tietorakenteet ja algoritmit
Nämä kalvot on lisensoitu Creative Commons Attribution-ShareAlike 1
521144A, Algoritmit ja Tietorakenteet, syksy 2013
Sovellusohjelman suunnittelu & toteutus
Java-ohjelmointi Opas ammattimaiseen osaamiseen Luku 4 Toistolauseet
OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT. LUOKKA JAVA ohjelma koostuu luokista LUOKKA sisältää metodeja molemmat sisältävät attribuutteja eli muuttujia.
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
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.
Poikkeustenkäsittely  Mitä poikkeustenkäsittely tarkoittaa?  Poikkeuksen käsitteleminen  Poikkeusluokkien hierarkia  Poikkeuksen heittäminen 1.
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.
© Jukka Harju, Jukka Juslin
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
4. Attribuutit 4.1. Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2.
5. Kapselointi Yleistä Kapseloinnilla (encapsulation) tarkoitetaan luokan tietojen ja toimintojen pakkaamista yhdeksi suojatuksi kokonaisuudeksi.
10. Abstrakti luokka Johdanto Abstrakti luokka (abstract class) poikkeaa konkreettisesta luokasta (ei-abstrakti luokka) siten, että siitä ei.
@ 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.
PARAABELI (2. ASTEEN FUNKTION KUVAAJIA)
@ Leena Lahtinen TIETOKONEOHJELMAN RAKENNE OHJELMALLA ON KAKSI OSAA:  MÄÄRITYSOSA TIETOJEN KUVAUKSIA VARTEN  SUORITUSOSA TIETOJEN KÄSITTELYÄ.
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.
4. Optimointia T
Negatiiviset luvut. Esimerkki 1 Järjestä talven matkakohteiden lämpötilat kylmimmästä lämpimimpään.
Sovellettu matematiikka 3 Jarkko Hurme1 Maplen peruskäyttö 2. Derivaatta ja integraali.
Olioiden taulukointi Perustaulukon käyttö Luokan ilmentymät voidaan tallettaa taulukkoon samoin kuin muuttujat Esimerkki talletetaan taulukkoon opintojaksojen.
Kontrollirakenteet laajemmin
Visual Basic -ohjelmointi
1 © Jukka Juslin Luokat, attribuutit ja metodit Yleistietoa: seuraavalla koulutusviikolla tarkempi käsittely.
Ohjelmointi 1. toinen luento1 Taulukot n Kiinteät taulukot: alkioiden määrä tiedetään Dim intCount(12) As Integer 0 indeksit saavat arvoja 0-12 (Option.
14. Poikkeukset Sisällys Johdanto poikkeuksiin. Poikkeusten käsittely: − Poikkeusten käsittely paikallisesti. − Poikkeusten heittäminen. Exception.
15. Ohjelmoinnin tekniikkaa
S ysteemianalyysin Laboratorio Teknillinen korkeakoulu Esitelmä 8 – Reda Guerfi Optimointiopin seminaari - Syksy 2009 Taloudellisen tuotantoerän skedulointi.
FOR i := 0...N-1 DO summa := summa + A[i] tulo := tulo * A[i] ENDFOR.
MAB3 suorat.
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.
Yksikkötestaus ● Yksikkötestauksella tarkoitetaan lähdekoodiin kuuluvien yksittäisten osien testaamista. Termi yksikkö viittaa ohjelman pienimpiin mahdollisiin.
15. Ohjelmoinnin tekniikkaa Sisällys For-each-rakenne. Lueteltu tyyppi enum. Override-annotaatio. Geneerinen ohjelmointi.
Taas laskin TIES341 Funktio-ohjelmointi 2 Kevät 2006.
String-vertailusta ja Scannerin käytöstä (1/2)
8. Rekursio.
1. Omat operaatiot.
Funktio-ohjelmointi ja Java
7. Hyvä ohjelmointitapa..
13. Loogiset operaatiot.
Määritä särmiön tilavuus
15. Ohjelmoinnin tekniikkaa
3. Luokat, oliot ja metodit Java-kielessä (Lausekielinen ohjelmointi I ja II –kursseilla opitun kertausta.)
16. Ohjelmoinnin tekniikkaa
11. Javan valintarakenteet
6. Metodit.
8. Rekursio.
15. Ohjelmoinnin tekniikkaa
7. Hyvä ohjelmointitapa..
Kontrollirakenteet laajemmin
13. Loogiset operaatiot.
3. Attribuutit.
16. Ohjelmoinnin tekniikkaa
Esityksen transkriptio:

21. Rekursio

Johdanto Rekursiivinen ohjelman 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