Reusj I. ET ENKELT EKSEMPEL II. TRE AV REKURSIVE KALL, eusjsdybde temeg dg III.INDUKTIVE DATA TYPER g Reusj ve Dt Type IV. SPLITT OG HERSK PROBLEMLØSNING VED REKURSJON Kp. 8.. V. REKURSJONS EEKTIVITET dyms pgmmeg vsjæg VI. STABEL AV REKURSIVE KALL tesj tl eusj eusj mplemetet sm tesj VII.KORREKTHET temeg vte demed fedg med geeell BASIS - : H-98 4. Reusj: I. 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 f temle tl f et heltll * @etu leste tllet * @except ge ut det mme et heltll /* publc t Red() { * Stg s= edl(); * t = het feste t f s; * whle (! lt ) gjet pev este lje; * etu ; publc t myred() { /* Stg s= edl(); * t = het feste t f s; * f (lt ) etu ; * else // pev gje med este lje * etu myred(); publc t myred() { ty{ etu Itege.pseIt(edl()); ctch(ioexcept e) { etu myred(); ctch(numbemtexcept e) { etu myred(); - : H-98 4. Reusj:
Itesj tl eusj t sumw(t ) { t =, es= ; whle ( = ) { es= es; ; etu es; t sumr(t ) { f ( == ) etu ; else etu sumr(-); Gvt g e % tg sgt: t W(t ) { = bss; es= t; whle (Bet(,)) { Kppe(,es); ppd(); etu es; t R(t ) { f ( == bss) etu t; else Kppe(, R(-ppd())); Ehve tesj (løe) sves sm e eusv metde... t..m. sm hle-eusj - : H-98 4. Reusj: II. Reusjsdybde g -te fb() = fb() = fb() = fb() fb() etue bsstlfelle publc t fb(t ) { f (== ==) etu ; else etu fb(-) fb(-); elles beeg eusvt elee (mde) dele g sett de smme f(4)...? f()...? eefølge f()...? v ll f(4) f()...? > f() f() f()...? > f() f() f() f() > f()...? > f() f() > f()...? f()...? > f()...? > > 5 > 5 # svte = # øde lje eusjsdybde = # eusve ll... tl bss tlfelle e ådd (= høyde v teet) - : H-98 4. Reusj: 4
III. Idutve Dt Type (vlålg ste me edelge) 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) Lste v N: L(N): bss: ull e e L(N) hvs L e L(N) g e N L N... N N L Stutuell deg... N... N så e: ( L) e L(N) L L Bæe Tæ v N: BT(N): bss: ull e et BT(N) t, t hvs så e: t, t e BT(N) g e N (t,, t) et BT(N) t t substutu supestutu t t t t - : H-98 4. Reusj: 5 Vsje ve tem dutv defsj = f bss g ppve eusj = f tppe mt bss fb() { N f (==) etu ; sum() { bss: else f (==) etu ; f (==) etu ; d: else etu else etu sum(-); fb(-) fb(-); AN c(an A,) { sum(an A,) { bss: [] -> N A[]; f (==) etu A[]; d:[.., ] -> N f (>) c(a,-); else etu A[] sum(a,-); LT clss LT { c(ls L) { sum(ls L) { bss: ull t ; f (L==ull) { f (L==ull) etu ; d: (L) LT xt; else { ; else etu sum(l.ext); c(l.xt); BT clss BT { c(bt B) { sum(bt T) { bss: ull t ; f (T==ull) { f (T==ull) etu ; d: (t,,t) BT left; else {; else etu BT ght; c(t.left); sum(t.left) c(t.ght); sum(t.ght) ; RACTALS - : H-98 4. Reusj: 6
IV. Spltt g Hes 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 m P = ste put y A /* t[] SS(t[] A,) { // telt ll med SS(A,) * f (==A.legth-) { etu A; * else { = dese tl mste elemetet A[...A.legth-]; * bytt A[] med A[]; * etu SS(A, ); /* t[] MS(t[] A) { t lgh= A.legth; * f (lgh == ) { etu A; * else { del A mdte * t= A[...lgh/] g t= A[lgh/...lgh]; * ste eusvt begge (mde) = MS(t) g = MS(t) * etu flettet esultt v eusve ll L(,) * * L - flette t stete y e stet y O ( ) O (*lg ) P = f et gtt elemet x e y A Hvs A e ustet : sje A[]; hvs e de, lett A[...-] Hvs A e stet... /* t BS(t[] A,x,l,h) { //telt ll med BS(A,x,,A.legth-) * f (l > h) { etu -; * else { m = mdte mellm l g h = (lh)/ ; * f ( A[m] == x ) etu m; * else f ( A[m] x ) lett øve del A[m...h]; * else lett ede del A[l...m-]; O () O (lg ) - : H-98 4. Reusj: 7 Bæ Sø /* f des A tl et elemet x: t BS(t[] A,x,l,h) { * @pm A t A[...] stet t m= (lh) / ; * @pm x f x A f (l > h) etu -; * @pm l, h me be fm. l tm. h else f (A[m] == x) etu m; * @etu des tl x; else f (A[m] x) etu BS(A,x,m,h); * - hvs e fes else etu BS(A,x,l,m-); Nøel e 48. ll. ll. ll bsø(a, 48,, 9) bsø(a, 48, 5, 9) bsø(a, 48, 5, 6) [] [] [] [] [4] [5] [6] [7] [8] [9] A[] 9 4 48 5 55 7 99 l = m = (9)/ h = 9 [] [] [] [] [4] [5] [6] [7] [8] [9] A[] 9 4 48 5 55 7 99 l = 5 m = (59)/ h = 9 [] [] [] [] [4] [5] [6] [7] [8] [9] A[] 9 4 48 5 55 7 99 l = 5 h = 6 bss tlfelle m = (56)/ A[m] == øel etu 5 - : H-98 4. Reusj: 8
V. Reusj & effetvtet Reduse tll eusve ll t fb(t ) { f (== ==) etu ; else etu fb(-)fb(-); f() f(4) f() f() f() f() f() f() f(). Dyms pgmmeg : Istedef gjettte eusve ll tl f() med smme, esulttet v f() lges f seee bu: t[] ; vd b(t ) { = ew t[]; []=; []=; fb(); t fb(t ) { f (== ==) etu ; else f ([] > ) { etu []; else { t z= fb(-) fb(-); []= z; etu z; f(4) f() f() f() f() - : H-98 4. Reusj: 9 Reusj & effetvtet lle pemutsje v [,,...-] /* pem(a,) { t l= A.legth-; * f (==l) { sv A; * else { * f hve d:...l * B= A; * bytt B[] g B[d] * pem(b,) pem B[...l] A[..-] A[] A[..l] pem(a,) sve lle pem /* PE(A) { t l= A.legth; * f hve :...l/ { * B= A; * bytt B[] g B[]; * pem(b,); * f (l dd) { * bytt A[] g A[l/]; * pem(a,); sv v(a);. Avsjæg...........................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, - : H-98 4. Reusj:
VI. Reusj... t fb(t ) { f (== ==) etu ; else etu fb(-) fb(-); f() f() f() f(4) f() f() f() 4 mplemetees med Stbel f() f() 5 5 - : H-98 4. Reusj: Reusj tl tesj ( lltd mgjøes v.hj.. Stbel) t fb(t ) { f (== ==) etu ; else etu fb(-) fb(-); /*t fbs(t ) p = ew Stc(); e = ew Stc(); = ew Stc(); t Object!!! p.push( );.push(); whle (!p.empty()) { = p.pp(); f ( == ) { Kst!!! t =.pp(); f (== ==) e.push(); else { p.push( ); p.push( ); p.push( );.push(-);.push(-); else f ( == ) { = e.pp(); = e.pp(); e.push(); etu e.pp(); ( Ne eusj, sm f.es. hle-eusj, gjøes m tl tesj på mye elee måte. ) - : H-98 4. Reusj:
VII. Kethet Gtt e sts v et pblem P :. hv gjø jeg å e bss tlfelle. hvd stuee løsg f utf løsge f e m P() f Bss() etu??? else Kmbe( P(m)... P(m) ) Temeg: P() f Bss() stppe eusj else væ se på t hve m e æmee Bss Effetvtet: vhege v eusjsdybde hv mye mde hve m e, elle hv stt steg mt Bss utgjø hvet eusvt ll Kethet: P() f Bss() tlle t det utføes tg hdlg else HVIS lle eusve ll P(m) utføe tge hdlge DETTE ANTAR VI!!! SÅ g Kmbe(P(m)...P(m)) tg esultt - : H-98 4. Reusj: Kethet: Ivt /* t[] MS(t[] A) { t lgh= A.legth; * f (lgh == ) { etu A; * else { del A mdte * t= A[...lgh/] g t= A[lgh/...lgh]; * ste eusvt (mde) = MS(t) g = MS(t) * etu flettet esultt v eusve ll L(,) Ivt: MS(A) etuee stet gumet A: f lgh== d e A stet else dele A t dsjute t= A[...lgh/] g t= A[lgh/...lgh] MS(t) g MS(t) etuee stete g!!! ORUTSETNING hvs L flette et, så etuee hele else-gee tg esultt t BS(t[] A,x,l,h) { t m= (lh) / ; f (l > h) etu -; else f (A[m] == x) etu m; else f (A[m] x) etu BS(A,x,m,h); else 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 else f A[m] = x d h v fuet de else f A[m] x e x A, så må de væe mellm [m... h]!!! ORUTSETNING: eusvt ll vl fe de de else A[m] > x e x A, så må de væe mellm [l... m-]!!! ORUTSETNING: eusvt ll vl fe de de - : H-98 4. Reusj: 4
Løevt t sum(t ) { f ( == ) etu ; bss: == sum() = else etu sum( ); hvs sum( ) etuee tg = så e sum() = sum( ) = = = t sumw(t ) { t =, =; whle (!= ) { = ; ; // =, =... b. Løevt, LI: = Itlseg: = & = = hvs LI: = = så hlde LI: = = = = => LI hlde fø ppe ' = ette ppe t sumw(t ) { t =, =; whle (!= ) { ; = ; // =, = etu ; 4. Utgg: LI: = & = => = = etu ; - : H-98 4. Reusj: 5 =