Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

GP10, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 10 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi.

Lignende præsentationer


Præsentationer af emnet: "GP10, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 10 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi."— Præsentationens transcript:

1 GP10, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 10 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder 9.15. www.itu.dk/courses/GP/E2005 Martin Lillholm

2 GP10, Martin Lillholm 2 Sidste gang Graphical User Interfaces (GUI) Projekter med relevans for GP – nu på hjemmesiden

3 GP10, Martin Lillholm 3 Denne gang Det sidste af GUI Rekursion

4 GP10, Martin Lillholm 4 Rekursion Nudansk ordbog: I matematik, sprogvidenskab og edb: fremgangsmåde ved definition eller beregning, som består i, at man gentagne gange anvender en og samme simple regel. Andre vil måske sige at rekursion er En definition der benytter begrebet der defineres i definitionen Nogen vil måske foretrækker noget i stil med: Rekursion... se rekursion (indtil du har forstået...) Rekursion benyttes når begreber defineres rekursivt

5 GP10, Martin Lillholm 5 Rekursiv tankegang – et eksempel En liste af (mindst et) tal kunne defineres ”normalt” som: List: Et eller flere tal adskilt af komma Eller rekursivt som: List: Et tal eller Et tal komma List Eksempler: 45 343, 12, 34 213, 34, 234,234,3, 5 Tavleillustration, uendelig rekursion (uendelig løkke) og basis tilfælde

6 GP10, Martin Lillholm 6 Rekursiv tankegang (matematisk set) Funktionen n!, der udtales n fakultet, beregner antallet af rækkefølger (permutationer) af n ting. F.eks. kan 3 personer sættes på en bænk i forskellige måder. Fakultetsfunktionen n! kan defineres ”normalt” som: Men kan også defineres rekursivt som: Tavleillustration, uendelig rekursion og basis tilfælde

7 GP10, Martin Lillholm 7 Rekursiv programmering En metode i Java kan kalde sig selv og dermed opnås rekursion En rekursiv metode er typisk delt op i: –Et basis tilfælde (rekursionen stopper) –De(t) rekursive kald til metoden selv eller Som altid: –Ethvert (rekursivt) metodekald giver anledning til nyt virkefelt med nye parametre og lokale variable – en ”ny” udgave af metoden –Når et metodekald afsluttes returneres til den kaldende metode – altså i tilfældet rekursion ofte til ”metoden selv” Direkte og indirekte rekursion

8 GP10, Martin Lillholm 8 Fakultetsfunktionen i Java int rfak(int n) { // Rekursiv fakultetsfunktion if (n == 0) return 1; // Basis tilfælde else return n * rfak(n - 1); // Rekursivt kald } int ifak(int n) { // Iterativ fakultetsfunktion int resultat = 1; for (int i=n; i >= 1; i=i-1) resultat = resultat * i; return resultat; } Side 580 i L&L for sum

9 GP10, Martin Lillholm 9 Og så den lidt syrede forklaring Den om manden og hans klon-maskine … http://personal.vsnl.com/erwin/recintro.htm

10 GP10, Martin Lillholm 10 Rekursion vs. iteration Alle problemer kan løses både iterativt og rekursivt. Rekursion er en anden måde at tænke på – men ækvivalent. Rekursive løsninger er ofte elegante på papiret Men... –Er langsommere pga. de mange metodekald –Kræver mere lager –Kan nemt ”løbe løbsk” Til gengæld... –Findes der problemer, der er egner sig rigtig godt til rekursion –Og faktisk er temmelig besværlige at løses iterativt uden hjælpedatastrukturer

11 GP10, Martin Lillholm 11 Tårnene i Hanoi – elegant rekursion Berømt ”spil” fra 1880’erne (Edouard Lucas) Alle skiver skal flyttes fra tårn A til tårn C. Kun en skive må flyttes af gangen En større skive må aldrig ligge oven på en mindre skive ABC

12 GP10, Martin Lillholm 12 Tårnene i Hanoi – eksempel StartopstillingTræk 1Træk 3Træk 2

13 GP10, Martin Lillholm 13 Tårnene i Hanoi – eksempel Træk 4Træk 5Træk 6Træk 7 (slut)

14 GP10, Martin Lillholm 14 Tårnene i Hanoi – rekursiv algoritme Flyt en stak af n skiver fra tårn A til tårn B med tårn C til hjælp: 1.Flyt de øverste n-1 skiver til ektrapinden 2.Flyt den nederste skive til destinationspinden 3.Flyt de n-1 skiver fra ekstrapinden til destinationspinden Men hvordan løser vi 1 for de n-1 skiver – rekursion. Hvordan ville vi løse dette iterativt ?

15 GP10, Martin Lillholm 15 Tårnene i Hanoi –SolveTowers.java side 590 i L&L i BlueJ Dog med et par twists – se en af dagens opgaver Grundideen i rekursion er altså at løse et problem ved gentagne gange at løse simplere delproblemer af samme slags Virker kun hvis delproblemerne rent faktisk er simplere end det oprindelige problem og Hvis de ender med et trivielt delproblem (basis tilfælde) Eksponentiel kompleksitet 2 N -1 for N skiver … og historiens om verdens undergang … en skive hver sekund for 64 skiver tager 548 milliarder år

16 GP10, Martin Lillholm 16 Fibonacci tal Talrækken: 1, 1, 2, 3, 5, 8, 13, 21, 34,... Tavlegennemgang Sjove eksempler fra den virkelige verden på: –http://www.mcs.surrey.ac.uk/Personal/R.Knott/Fibonacci/fibnat.htmlhttp://www.mcs.surrey.ac.uk/Personal/R.Knott/Fibonacci/fibnat.html

17 GP10, Martin Lillholm 17 Quicksort – sortering med rekursion Peter Sestofts notenote

18 GP10, Martin Lillholm 18 Sorteringsmetoder – sammenligning

19 GP10, Martin Lillholm 19 Fraktaler Fraktaler er geometriske former, der er selvsimilære eksempelvis ved at det samme mønster gentages på forskellige skalaer og orienteringer Koch Snowflake – uformel gennemgang –KochSnowflake.java side 597 i L&L i BlueJ


Download ppt "GP10, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 10 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi."

Lignende præsentationer


Annoncer fra Google