811120P Diskreetit rakenteet 2016-2017 ari.vesanen (at) oulu.fi
5. Rekursio ja induktio Rekursio tarkoittaa jonkin asian määrittelyä itseensä viittaamalla Tietojenkäsittelyssä algoritmin määrittely niin, että se kutsuu itseään. Yleensä ohjelmointikielissä rekursiiviset funktiot mahdollisia Matematiikassa rekursiivinen funktio määritellään sen aiempien arvojen perusteella Induktio on tapa todistaa äärellisiä rakenteita koskevia väittämiä etenemällä yksityisestä yleiseen Rekursion avulla voidaan konstruoida algoritmi ja induktion avulla todistaa se oikeaksi 811120P Diskreetit rakenteet, Rekursio ja induktio 2
5.1 Rekursiiviset lukujonot Tarkastellaan äärettömiä lukujonoja, joiden termit voidaan määritellä rekursiivisesti Yleinen ääretön reaalilukujono voidaan määritellä muodossa a 1, a 2, a 3, missä a n IR aina, kun n IN + Kolme pistettä tarkoittaa, että jono jatkuu loputtomiin Luku a n on jonon jäsen eli termi Voidaan kirjoittaa myös: (a n ) n 1 811120P Diskreetit rakenteet, Rekursio ja induktio 3
5.1 Rekursiiviset lukujonot (2) Jokainen lukujono (a n ) n 1 voidaan mieltää funktioksi f : IN + IR, missä f(n) = a n Esimerkki. Parillisten positiivisten kokonaislukujen jono 2,4,6,8, voidaan kirjoittaa funktion f : IN + IR, f(n) = 2n avulla jonona (a n ) n 1 jonka yleinen termi a n = 2n Muita esimerkkejä: 1,3,5,7,9, ; a n = 2n+1 1,4,9,25,36, ; a n = n 2 Edellä on annettu lukujonon yleinen termi: tämä on epärekursiivinen tapa määritellä lukujono 811120P Diskreetit rakenteet, Rekursio ja induktio 4
5.1 Rekursiiviset lukujonot (3) Parillisten lukujen jono 2,4,6,8, voitaisiin määritellä myös rekursiivisesti: jonon ensimmäinen termi = 2; jonon muut termit saadaan lisäämällä edelliseen termiin luku 2 Tarkemmin: a 1 = 2 ja a n+1 = a n +2, kun n IN + Jono 1,3,5,7,.. rekursiivisesti a 1 = 1 ja a n+1 = a n +2, kun n IN + 811120P Diskreetit rakenteet, Rekursio ja induktio 5
5.1.1 Rekursiivisen lukujonon laskeminen x P(x) x P(x) Rekursiivisen määrittelyn pohjalta on helppo kirjoittaa (iteratiivinen) algoritmi, joka tulostaa lukujonoa Esimerkki jono 2,4,6,8, Syöte: Positiivinen kokonaisluku k Tulostus: k ens. termiä jonosta 2,4,6,8, JONO(k) 1. a = 2 2. print a 3. for i = 2 to k do 4. a = a + 2 // luku a i 5. print a 811120P Diskreetit rakenteet, Rekursio ja induktio 6
5.1.1 Rekursiivisen lukujonon laskeminen (2) Jonon termi voidaan laskea myös rekursiivisella algoritmilla (joka kutsuu itseään): Syöte: Positiivinen kokonaisluku n Tulostus: Palauttaa jonon 2,4,6,8, n:nnen termin TERMI(n) 1. if n == 1 then 2. return 2 3. else 4. return (TERMI(n-1) + 2) 811120P Diskreetit rakenteet, Rekursio ja induktio 7
5.1.2 Rekursioyhtälö Edellisen lukujonon 2,4,6,8, esitys a 1 = 2 a n+1 = a n + 2 (n IN + ) on rekursioyhtälö, jossa a 1 = 2 muodostaa yhtälön alkuarvon ja a n+1 = a n + 2 sen rekursio-osan Rekursioyhtälöitä voidaan ratkaista monilla menetelmillä, esimerkiksi yhtälö a 1 = 1; a n+1 = 2 a n + 1 (n IN + ) jolloin jono on 1,3,7,15,31, arvataan, että a n =2 n -1 ja todetaan, että tämä on ratkaisu 811120P Diskreetit rakenteet, Rekursio ja induktio 8
5.2 Induktio Alun perin tekniikan avulla todistettiin luonnollisia lukuja koskevia väitteitä Voidaan yleistää moniin muihinkin tapauksiin Analogia: Äärettömän pitkä ketju dominopalikoita Osoitetaan: Kaatuessaan n:s palikka kaataa (n+1):nnen palikan kaikilla arvoilla n=1,2, Seuraus: Jos ensimmäinen palikka kaadetaan, niin koko jono kaatuu 811120P Diskreetit rakenteet, Rekursio ja induktio 9
5.2 Induktio (2) Induktiotodistuksella todistetaan jokin kokonaislukuja koskeva väite P(n) oikeaksi aina, kun n n 0 Esimerkiksi P(n) voisi olla väite luku 2n on parillinen Usein n 0 =1, jolloin väite koskee kaikkia positiivisia kokonaislukuja Induktiotodistuksen periaate: 1. Todetaan, että P(n 0 ) on tosi 2. Todistetaan, että jos P(n) on tosi, niin siitä seuraa että P(n+1) on tosi Tällöin P(n) on totta aina, kun n n 0 dominopalikkaperiaatteen nojalla 811120P Diskreetit rakenteet, Rekursio ja induktio 10
5.2 Induktio (3) Induktiotodistus koostuu teknisesti kolmesta osasta 1. Perusaskel: Todetaan, että väite P(n) totta kun n=n 0, ts. että P(n 0 ) on tosi 2. Induktio-oletus: Oletetaan, että k n 0 ja P(k) on tosi 3. Induktioväite: Osoitetaan induktio-oletusta käyttämällä, että P(k+1) on tosi Tehtävä: Osoita, että 1+2+ +n = n(n+1)/2 aina kun n on positiivinen kokonaisluku, siis n 1 811120P Diskreetit rakenteet, Rekursio ja induktio 11