1 / 19

Martin Lillholm

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. Sidste gang. Graphical User Interfaces (GUI) Projekter med relevans for GP – nu på hjemmesiden.

rudolf
Télécharger la présentation

Martin Lillholm

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Sidste gang • Graphical User Interfaces (GUI) • Projekter med relevans for GP – nu på hjemmesiden

  3. Denne gang • Det sidste af GUI • Rekursion

  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. 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. 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. 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. 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. Og så den lidt syrede forklaring • Den om manden og hans klon-maskine … http://personal.vsnl.com/erwin/recintro.htm

  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. 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 A B C

  12. Tårnene i Hanoi – eksempel Startopstilling Træk 1 Træk 2 Træk 3

  13. Tårnene i Hanoi – eksempel Træk 4 Træk 5 Træk 6 Træk 7 (slut)

  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: • Flyt de øverste n-1 skiver til ektrapinden • Flyt den nederste skive til destinationspinden • 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. 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 2N-1 for N skiver … og historiens om verdens undergang … en skive hver sekund for 64 skiver tager 548 milliarder år

  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.html

  17. Quicksort – sortering med rekursion • Peter Sestofts note

  18. Sorteringsmetoder – sammenligning

  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

More Related