Itesj tl eusj /** @pm > @etu... t sumw(t ) { t es =; whle ( > ) { es = es ; = ; etu es; /** @pm > @etu... t sumr(t ) { f ( == ) etu ; etu sumr(-); Geeellt, dg e % tg: t Ite(t ) { es= t; whle ( ftsett() ) { es= Kppe(,es); ppdte(); etu es; t Reusv(t ) { f (!ftsett() ) etu bsetlfelle; etu Kppe(, Reusv(ppdte())); Ehve tesj sves sm eusj... t..m. sm hle-eusj - : H- 5. Reusj:. Reusjste g -dybde; Es: bcc-tllee fb() = fb() = fb() = fb() fb() f() f() f() f() f() 5 publc t fb(t ) { f (== ==) etu ; etu fb(-) fb(-); etue bsstlfelle f() f() f() elles beeg eusvt elee (mde) dele g sett dsse smme te v eusve ll...? > 5 f()...? eefølge > f()...? v ll > f()...? > f()...? > f()...? > f()...? > f()...? > f()...? > eusjsdybde #svte = #øde lje = # eusve ll... tl bsstlfelle e ådd (=høyde v teet) - : H- 5. Reusj: 4 Reusj I. TRE AV REKURSIVE KA, eusjsdybde temeg dg II. INDUKTIVE DATA TYPER g Reusj ve sle III. SPITT OG HERSK PROBEMØSNING VED REKURSJON (Kp. 8..) IV. REKURSJONS EEKTIVITET memseg vsjæg V. STABE AV REKURSIVE KA tesj tl eusj eusj mplemetet sm tesj VI. KORREKTHET temeg vte (tt tl Kgdhl&Hvee) - : H- 5. Reusj: Et eelt esempel h e metde sm /** lese e lje f temle * @etu leste Stg * @except IOExcept tlfelle / pblem publc Stg edl() g vl lge e sm /** lese e lje f temle * tl de lese et heltll * @etu leste tll * @except ge ut * t det mme et heltll /* publc t Red() { * Stg s= edl(); * t = het t f s; * whle (! lt ) * gjet: = het t f este lje; * etu ; /* publc t myred() { * Stg s= edl(); * t = het t f s; * f (lt ) etu ; * // pøv este lje * etu myred(); publc t myred() { ty{ etu Itege.pseIt(edl()); ctch(ioexcept e) { etu myred(); ctch(numbemtexcept e) { etu myred(); - : H- 5. Reusj:
E tes bemeg ste v N: [N]: bss: ull e e [N] hvs e [N] g e N så e: (,) e [N] Reusj mplemetet utef dtstutue : clss N { c(n ) { t sum(n ) { publc t hdedt; f (==ull) { f (==ull) etu ; publc N estlste; {.hdedt; etu sum(.estlste).hdedt;... c(.estlste); clss N { pvte t hdedt; pvte N estlste; c() {... t sum() {... elle ef dtstutue : c() { t sum() { hdedt; f (estlste!= ull) f (estlste!= ull) etu estlste.sum()hdedt; estlste.c(); etu hdedt; c(n ) { t sum(n ) { f (!= ull) f (!= ull).c(); etu.sum(); etu ; - : H- 5. Reusj: 7 Itetvt esempel: Selesjsteg /* SS - stee put y (SelesjSt) * @pm - t tb[...] * @etu - stet tb * * f ( =,,...) { * = * f ( j =...) * f (tb[j] tb[]) = j; * bytt elemetee ved des g * f e vlålg put tbell med legde : utføe tesje (f =,...) g hve tesj gå gjem sluttsegmet [...], (f j=...), dvs. tdsmplesstet SS() ( = ) = ( ) = ( ) O ( ) = = - : H- 5. Reusj: 8. Idutve Dt Type (vlålg ste me edelge) Stutuell deg tulge tll N: y v N: A(N) bss: e et N bss -> N e A(N) hvs e et N hvs [...] -> N e A(N) så e: et N så e [...,] -> N e A(N) ste v N: (N): bss: ull e e (N) hvs e (N) g e N så e: (,) e (N) N... N N... N... N Bæe Tæ v N: BT(N): bss: ull e et BT(N) t hvs t, t e BT(N) g e N t t, t så e: (t,, t) et BT(N) t t t t - : H- 5. Reusj: 5 Vsje ve tem dutv defsj = f bss g ppve ***** eusj = f tppe mt bss N t fb() { t sum() { bss: f (== ==) etu ; f (==) etu ; d: etu fb(-) fb(-); etu sum(-); Ay[N] vd c(an A, t ) { t sum(an A, t ) { bss: [] -> N A[]; f (==) etu A[]; d: [.., ] -> N f ( > ) c(a,-); etu A[] sum(a,-); ste[n] clss S { vd c(s ) { t sum(s ) { bss: ull t hdedt; f (==ull) { f (==ull) etu ; d: (,) S estlste; { hdedt; etu sum(.estlste)hdedt; c(.estlste); BætTe[N] clss BT { vd c(bt B) { t sum(bt T) { bss: ull t ; f (T==ull) { f (T==ull) etu ; d: (t,,t) BT left; { ; etu BT ght; c(t.left); sum(t.left) c(t.ght); sum(t.ght) ; RAKTAe - : H- 5. Reusj: 6
- : H- 5. Reusj: 9 Reusvt esempel:megest /* - flette t stete y: * @pm - t t[...], t[...] - stete * @etu - stet t[...] * gå (smtdg) gjem t g t (med g ) * f t[] t[] plsse t[] t g ø, * plsse t[] t g ø, * hvs e gje t elle t, flytt det tl t * etu t; (,) = O () /* MS - stee put y: * @pm - t tb[...-] * @etu - stet tb * f ( == ) etu tb * { = /; * etu ( MS(tb[...]), MS(tb[..-]) ); = / / = lg () /4 /4 /4 /4 =........................... = MS() = O ( * lg () ) = = - : H- 5. Reusj: MS[ 4] [ ] - [4] [] - [ ] [ 4] MS[ 4 5] MS[] MS[4] MS[] [] [4] [] 4 4 [ 4] - [ 5] [4] - [ 5] [ 4] - [ 5] [ 4] - [ 5] [ ] - [ 5] [ ] - [ ] [ 4 5] MS t[...] f ( == ) etu t; = /; etu ( MS t[...], MS t[...]) 4 4 5 5 MS[ 5] [ ] - [ 5] [] - [ ] [ 5] MS[] [] MS[ 4] [ ] - [] - [ ] [ 5] 5 MS ttlt: 5 5 7 5 =. Spltt g hes (eg: Dvde d Cque) Reusj sm e geeell stteg f pblemløsg g lgtmedesg Gtt e sts v et pblem P :. hv gjø jeg å e bss tlfelle. hvd stuee løsg f utf løsge f e stse mde e P = ste put y A ( = A.legth) O ( ) O (*lg ) /* t[] MS(t[] A) { t = A.legth; * f ( == ) { etu A; * { del A mdte * t= A[.../] g t= A[/...lgh]; * ste eusvt begge (mde) * = MS(t) g = MS(t) * etu flettet esultt v eusve ll (,) * - flette t stete y e stet y /* t[] SS(t[] A,) { * telt ll med SS(A,) * = A.legth; * f (==-) { etu A; * { * = dese tl mste elemetet * A[...-]; * bytt A[] med A[]; * etu SS(A, ); P = f et gtt elemet x e y A O () Hvs A e ustet : sje A[]; hvs x e e de, lett A[... ] Hvs A e stet... - : H- 5. Reusj:
Reusj & effetvtet lle pemutsje v [,,...-] (f et ptll ) /* pem(a,) { t l= A.legth-; * f (==l) { sv A; * { * f hve d:...l * pem(a,); * bytt A[] g A[d] * pem(a,); * te[...l]; A[..-] A[] A[..l] pem(a,) sve lle pem /* PE(A) { t l= A.legth-; * f hve :...l/ { * bytt A[] g A[]; * pem(a,); * bytt A[] g A[]; sv v(a);. Avsjæg...........................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, - : H- 5. Reusj: 5 Kmplestet v e eusv fusj Alyse vh REKURSJONSTRE vhege v stø på steget hvet eusvt ll (høyde v teet) tll eusve ll hvet steg ( bedde v fgege) bedsmegde ved smmesettg v esultte f eusve ll. At dette O() esemplee ude. R() =, R() = R() = R() R() O( ) R() =, R() = R() = R() R() R() O( ) R() =, R() = R() = R() * O() h= h= h= R() =, R() = R() = R() R() O(.6 ) 4 h= bcc dg feles tl: O() 4 R() = lg() = -=O() R() = R(/) R(/) h= f (/) (/4) (/8) - : H- 5. Reusj: 6 Bæ Sø /* f des A tl et elemet x: t BS(t[] A,x,l,h) { * @pm A t A[...] stett m= (lh) / ; * @pm x f x A f (l > h) etu -; * @pm l, h sø A be fm. l tm. h f (A[m] == x) etu m; * @etu des tl x; f (A[m] x) etu BS(A,x,m,h); * hvs x e fes etu BS(A,x,l,m-); O (lg ) // telt ll med BS(A, x,, A.legth ) Nøel e 48. ll. ll. ll bsø(a, 48,, 9) bsø(a, 48, 5, 9) bsø(a, 48, 5, 6) A[] A[] A[] bss tlfelle [] [] [] [] [4] [6] [7] [8] [9] 9 4 48 5 55 7 99 l = m = (9)/ h = 9 [] [] [] [] [4] [6] [7] [8] [9] 9 4 48 5 55 7 99 l = 5 m = (59)/ h = 9 [] [] [] [] [4] [6] [7] [8] [9] 9 4 48 5 55 7 99 l = 5 h = 6 m = (56)/ A[m] == øel etu 5 - : H- 5. Reusj: 4. Reusj g effetvtet Reduse tll eusve ll t fb(t ) { f (== ==) etu ; etu fb(-)fb(-);. Memseg : Istedef gjettte eusve ll tl f() med smme, dette tlfelle esulttet v f() lges f seee bu: O(.6 ) f() f() f() f() f() f() f() f() t b(t ) { O() t[] = ew t[]; []=; []=; etu fb(, ); t fb(t, t[] ) { f ([] > ) { etu []; { t z= fb( ) fb( ); []= z; etu z; f() f() f() f() - : H- 5. Reusj: 4
6. Kethet Gtt e sts v et pblem P :. hv gjø jeg å e bss tlfelle. hvd stuee løsg f utf løsge f e stse mde e P() f Bss() etu??? Temeg: P() f Bss() stppe eusj Kethet: P() f Bss() tlle et utfø etu Kmbe(P(m)... P(m)) gte t hve m, e æmee Bss HER MÅ VI VISE HVIS -> SÅ HVIS hvet eusvt ll P(m) etuee tg esultt!!! DET OVENSTÅENDE ANTAR VI!!! mbsj ppetthlde eusjs-vt SÅ g Kmbe(P(m)... P(m)) tg esultt - : H- 5. Reusj: 9 Kethet: eusjs-vt /* t[] MS(t[] A) { t = A.legth; * f ( == ) { etu A; * { * del A mdte : * t= A[.../] g t = A[/...]; * ste eusvt (mde) delee * = MS(t) g * = MS(t) * etu flettet esultt v * eusve ll (,) Ivt: MS(A) etuee stet gumet A: f lgh== d e A stet dele A t dsjute dele t= A[.../] g t= A[/...] = MS(t) etuee stet t = MS(t) etuee stet t hvs flette et t stete y, så etuee hele -gee stet A /* t BS(t[] A, t x, t l, t h) { * t m= (lh) / ; * f (l > h) etu ; * f (A[m] == x) etu m; * f (A[m] x) etu BS(A, x, m, h); * etu BS(A, x, l, m ); Ivt: gumetet A e stet & e x A, så e de mellm [l... h] (telt ll med (A, x,, A.legth-) f l > h x e væe de ( e tg) f A[m] = x d h v fuet de (m e tg) f A[m] x e x A, så må de væe mellm [m... h] BS(A, x, m, h) vl etuee tg esultt A[m] > x e x A, så må de væe mellm [l... m ] BS(A, x, l, m ) vl etuee tg esultt - : H- 5. Reusj: 5. Reusj mplemetet med stbel... b v bue f.es. stble (gumet), p(pet), e(esultt) t b(t ) { f (== ==) etu ; etu b(-) b(-); f() f() 4 f() f() f() f() f() f() 5 5 - : H- 5. Reusj: 7 Reusj tl tesj ( lltd mgjøes v.hj.. Stbel) t fbs(t ) { Stg ; t,, ; Stc p = ew StcImp(); Stc e = ew StcImp(); Stc = ew StcImp(); t b(t ) { f (== ==) etu ; etu b(-) b(-); p.push( );.push( ew Itege() ); whle (!p.empty()) { = (Stg) p.pp(); f (.equls( ) ) { = ( (Itege).pp() ).tvlue(); f (== ==) e.push( ew Itege() ); { p.push( ); p.push( ); p.push( );.push( ew Itege(-) );.push( ew Itege(-) ); Ne eusje (f.es. hle-eusj) mgjøes tl tesj på e elee måte. f (.equls( ) ) { = ( (Itege)e.pp() ).tvlue(); = ( (Itege)e.pp() ).tvlue(); e.push( ew Itege() ); etu ( (Itege)e.pp() ).tvlue(); - : H- 5. Reusj: 8
øe-vt: esempel. /** beege støste felles dvs @pm x > @pm x > @etu y = gcd(x,x) gcd(x,x) { y= x; y= x; tlseg: x = y & x = y gcd(x,x) == gcd(x,x) whle (y!= ) { I: gcd(y,y) = gcd(x,x) t t de gjelde he f (y y) (y,y) = (y,y); gcd(x,x) = gcd(y,y) = gcd(y,y) = gcd(y,y ) // (y >= y) y= y y; gcd(x,x) = gcd(y,y) = gcd(y,y-y) = gcd(y,y ) etu y; I : cd(y,y ) = gcd(x,x) utgg: I & y = gcd(x,x) = gcd(y,y) = gcd(,y) = y Hvs gcd(y,y) = z >= & y >= y, så *) y = z* = z* = y & gcd(,) = Me d: y = y y = z*( ) & gcd(, ) = hvs e, dvs. gcd(, ) = v >, d = v* & = v*b, så = v*bv* = v*(b) dvs. d gså gcd(,) = v > mtse *) - : H- 5. Reusj: Oppsummeg. Reusj Spltt g hes bestem hv sm må gjøes bss tlfelle() stue ( hes ) e løsg f (eusve) løsge f ( spltt ) e mde stse. Ehve dutv dttype (t, t, lste, tæ,...) g pphv tl eusve lgtme. Reusj vs. tesj (eusj mplemetees tetvt med bu v stbel) 4. Kmplestet v eusv fusj vhege v tll de eusjste ( spltt ) dybde (høyde) v teet hv stt steg mt bss utgjø hve splttg tll eusve ll (bedde v teet) på hvet vå bedsmegde f å stuee e løsg utf løsge f mde stse ( hes ) 5. Kethet bestem eusjs-vte vefse t bsstlfelle() etblee vte ude t t eusve ll etblee vte, vs t stusje vl ppetthlde de bestem løe-vt vs t de gjelde ette tlseg (le fø gge løe) ude t t de gjelde fø løeppe, vs t de gjelde gså ette dee - : H- 5. Reusj: 4 øe-vt t sum(t ) { f ( == ) etu ; bss g tg sum() = etu sum( ); hvs sum( ) g tg = så e sum() = sum( ) = = = t sumw(t ) { t =, =; whle (!= ) { = ; ; // =, =... b. øe-vt, I: = = = Itlseg: = & = = => I = hvs I: = hlde fø ppe = så hlde I : = ette ppe ' = t sumw(t ) { t =, =; whle (!= ) { ; = ; // =, = etu ; 4. Utgg: I: = & = => = = = etu ; - : H- 5. Reusj: øe-vt: esempel. /** beege heltlls vset smt este @pm x >= @pm y > @etu (q, ) s. x= q*y & = y & = q dv(t x, t y) { t q = ; t = x ; tlseg: q = & = x >= x= q*y & = & = q whle (y = ) { I: = & x = q*y & = q t t de gjelde ved gg, smt y = q = q ; = y; d gjelde, ette løeppe: q = q & = q = q & = y & = & y = = q *y = (q)*y ( y) = q*y y y = q*y = x dvs. I ppetthldes gjem ppe etu (q, ) ; utgg f løe: I & y x = q*y & = y & = q - : H- 5. Reusj: