 Michael E. Caspersen, 2000Introducerende objektorienteret programmering7A.1 Rekursion.

Slides:



Advertisements
Lignende præsentationer
1 Rekursion og algoritmedesign. 2 Rekursion Rekursiv definition af X: X defineres i termer af sig selv. Rekursion er nyttig, når en generel version af.
Advertisements

// Semaphore.java package semaphore; public class Semaphore { int resources = 1; // Constructors Semaphore() {} Semaphore(int i) { resources = i; } synchronized.
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.
1 Nordjyllands Erhvervakademi Lektion 6 Opsamling på opgaver Mere om rekursion: –Del&Hersk –Sortering –Kompleksitet (effektivitet – ”Store O”) Abstrakte.
Begreber og Redskaber 8. Plan for idag Sortering fortsat Comparable Søgning –Lineær søgning –Binær søgning.
GP 10, 7/ Grundlæggende programmering Efterår 2001 Forelæsning 10 onsdag 7/ kl. 9:15 – 12:00.
Induktion og rekursion
FEN Rekursion og induktion1 Induktion og (især) rekursion Mange begreber defineres ud fra en basis og så en gentagen anvendelse af et antal regler.
1 Rekursion og algoritmedesign. 2 Rekursion Matematisk induktion Rekursion Simple eksempler Kryptering Plan Designmetoder Del-og-hersk Dynamisk programmering.
Forelæsning 5.1 Brug af klassen Collections og interfacet Comparable samt parametriserede typer Projektuge: Ants and Spiders / Lommeregner dIntProg,
Paradigmer i Programmering 2. Sammensatte typer Tupler og lister Programmering med rekursion Programmering med pipe-lines Programmering med polymorfe.
Begreber og Redskaber 7. Plan for idag Rekursive underprogrammer Rekursive datastrukturer Rekursion vs iteration Rekursivt: Flette sortering.
Søgning.  Michael E. Caspersen, 2000Introducerende objektorienteret programmeringSøgning.2 Søgeproblemer... Søgning efter fil(er) Søgning i databaser.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering9B.1 Fletning.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6B.1 Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence.
Klassevariable- og metoder Tilstand og opførsel på klasseniveau.
 Bærbak & Caspersen, 2000Introducerende objektorienteret programmering1.1 Turtlemaskinen Arkitektur, instruktionssæt og eksempler.
Rekursion 2.  Michael E. Caspersen, 2000Introducerende objektorienteret programmeringRekursion 2.2 Introduktion Vi har tidligere set eksempler på rekursive.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering5A.1 OOP – Model før funktioner Funktionsorienteret versus objektorienteret systemudvikling.
Sortering.  Michael E. Caspersen, 2000Introducerende objektorienteret programmeringSortering.2 Sortering Vi hartidligere set at effektiv søgning forudsætter.
Rekursive skildpadder Supertrekanter.....  Michael E. Caspersen, 2000Introducerende objektorienteret programmeringRekursive skildpadder.2 Penta, etc.
Lærde skildpadder Specialisering af skildpadder – nye kompetencer (metoder/kommandoer)
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering7B.1 Søgning.
 Bærbak & Caspersen, 2000Introducerende objektorienteret programmeringAlgebra.1 Algebraiske begreber Tal, sandhedsværdier og figurer.
DAIMIIntroducerende objektorienteret programmering3B.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
 Henrik B. Christensen, 1999Introducerende objektorienteret programmering8B.1 Interfaces En ren kontrakt.
 Jens Bennedsen, 2003Introducerende objektorienteret programmeringinterfaces.1 Interfaces En ren kontrakt.
 Bærbak & Caspersen, 2000 Introducerende objektorienteret programmering4B.1 Talsystemer Positionstalsystemer Decimale og binære tal.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6A.1 Programmering med interfaces – en stak og en HP-regnemaskine push pop.
DAIMIIntroducerende objektorienteret programmering2C.1 Syntaksbeskrivelse Syntaksdiagrammer og EBNF-notation.
Lærde skildpadder Specialisering af skildpadder – nye kompetencer (metoder/kommandoer)
I o p o DAIMI, AU, December 1999Introducerende objektorienteret programmering14A.1 Del, løs og kombinér.
DAIMIIntroducerende objektorienteret programmering4A.1 Kontrakter og Design Kontraktbaseret design, JavaDoc dokumentation.
Klasser og objekter – grundbegreber.  Michael E. Caspersen, 2001Introducerende objektorienteret programmeringKlasser og objekter.2 Klasser og objekter.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
Collectionklasser Klassifikation og anvendelse. dIntProg, F08Collectionklasser.2 Samlinger af objekter Objektreferencer –for at holde fast i et objekt.
Interfaces – hvorfor, hvad og hvordan?.  Michael E. Caspersen 2003IOOPInterfaces.2 Oversigt Interfaces, hvorfor –Separering af specifikation (interface)
 Jens Bennedsen 2001Multimedie programmering10B.1 Interfaces En ren kontrakt.
 Bærbak & Caspersen, 2000Introducerende objektorienteret programmering2B.1 Syntaksbeskrivelse Syntaksdiagrammer og EBNF-notation.
Positionstalsystemer Decimale og binære tal
I o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering6C.1 OOP – Hvorfor nu det? Funktionsorienteret versus objektorienteret systemudvikling.
I o p o DAIMI, AU, December 1999Introducerende objektorienteret programmering14B.1 Sortering.
DAIMIIntroducerende objektorienteret programmering4A.1 Kontrakter og Design Kontraktbaseret design, JavaDoc dokumentation,
I o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering6B.1 Rekursive skildpadder Supertrekanter....
DAIMIIntroducerende objektorienteret programmeringfletning.1 Fletning.
I o p o DAIMI, AU, November 1999Introducerende objektorienteret programmering9D.1 Del, løs og kombinér.
Syntaksbeskrivelse Syntaksdiagrammer og EBNF-notation.
DAIMIIntroducerende objektorienteret programmering4D.1 Betingelsessætninger if.
DAIMI, AUIntroducerende objektorienteret programmering11A.1 Destilleret UML Oversættelse fra UML til Java.
I o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering3E.1 Syntaksbeskrivelse Udtryk og Java-programmer.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
I o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5C.1 Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence.
Objektinteraktion i GUI’er MVC og Observer.  Michael E. Caspersen, 2003Introducerende objektorienteret programmeringmvc.2 AWT framework Listeners og.
 Michael E. Caspersen, 2000 Introducerende objektorienteret programmering4A.1 Sweep-algoritmer Programmering med invarianter og uden kaniner.
Billedbehandling – processering af digitale billeder.
DAIMIIntroducerende objektorienteret programmering2A.1 Lærde skildpadder Specialisering af skildpadder – nye kompetencer (metoder/kommandoer)
Del, løs og kombinér Et algoritmemønster.
Skildpadder Modeller, objekter og opførsel.  Michael E. Caspersen, 2000Introducerende objektorienteret programmeringSkildpadder.2 Model Modeller bruges.
Containerklasser – klassifikation og brug.  Michael E. Caspersen, 2003IOOPContainerklasser.2 Mange objekter Containerklasser –antag at man skal repræsentere.
I o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering7B.1 Søgning.
Introduktion til øvelsen ”Bidrag til kerneopgaven” Formål med øvelsen Forberedelse Indledning Runde 1 Runde 2 Runde 3 Afslutning på øvelsen 2.
Algoritmeskabeloner findOne, findAll, findNoOf, findSumOf Primitive typer (forfremmelse og begrænsning) Identitet versus lighed (for objekter, herunder.
Forelæsning Uge 3 – Torsdag
Forelæsning Uge 4 – Mandag
Forelæsning Uge 3 – Torsdag
Quiz – Uge 3 – mandag – første time
Forelæsning Uge 3 – Torsdag
Forelæsning Uge 4 – Torsdag
Forelæsning Uge 3 – Torsdag
Quiz – Uge 3 – mandag – første time
Præsentationens transcript:

 Michael E. Caspersen, 2000Introducerende objektorienteret programmering7A.1 Rekursion

 Michael E. Caspersen, 2000Introducerende objektorienteret programmering7A.2  E ::= E op E | “(“ E “)” | Tal  op ::= “+” | “-” | “’” | “/”  Tal ::= “0” | “1” | “2” | “3” | “4”  | “5” | “6” | “7” | “8” | “9” Rekursion, syntaksbeskrivelse * 9 E EEop EE * +TT 37 9

 Michael E. Caspersen, 2000Introducerende objektorienteret programmering7A.3 Rekursion, Java public void superTriangle(int d, int l) { // d >= 0 if ( d == 0 ) triangle(l); else { superTriangle(d-1, l/2); move(l/2); superTriangle(d-1, l/2); turn(120); move(l/2); turn(-120); superTriangle(d-1, l/2); turn(-120); move(l/2); turn(120); }

 Michael E. Caspersen, 2000Introducerende objektorienteret programmering7A.4 Mønster Termineringsregel: simpelt (evt. simple) tilfælde hvor rekursionen stopper Rekurrensregel: rekursin definition

 Michael E. Caspersen, 2000Introducerende objektorienteret programmering7A.5  E ::= E op E |  “(“ E “)” |  Tal Rekursion, syntaksbeskrivelse Rekurrensregler Termineringsregel

 Michael E. Caspersen, 2000Introducerende objektorienteret programmering7A.6 Rekursion, Java public void superTriangle(int d, int l) { // d >= 0 if ( d == 0 ) triangle(l); else { superTriangle(d-1, l/2); move(l/2); superTriangle(d-1, l/2); turn(120); move(l/2); turn(-120); superTriangle(d-1, l/2); turn(-120); move(l/2); turn(120); } Rekurrensregel Termineringsregel

 Michael E. Caspersen, 2000Introducerende objektorienteret programmering7A.7 Fibonacci-tal 1, 1, 2, 3, 5, 8, ? f 1 = 1 f 2 = 1 f n = f n-1 + f n-2 f 5 = f 4 + f 3 = (f 3 + f 2 ) + (f 2 + f 1 ) = ((f 2 + f 1 ) + f 2 ) + (f 2 + f 1 )

 Michael E. Caspersen, 2000Introducerende objektorienteret programmering7A.8 Fibonacci som Java-kode int fib (int n) { // pre: n >= 1 // post: fib(n) = f n (det n’te Fibonacci-tal) if ( n==1) return 1; else if ( n==2 ) return 1; else return fib(n-1) + fib(n-2); }

 Michael E. Caspersen, 2000Introducerende objektorienteret programmering7A.9 Introduktion Vi skal nu se nærmere på rekursion som en problem- løsningsteknik, og specielt skal vi senere i kurset se nærmere på skabelonen del, løs og kombinér som indfanger en stor klasse af rekursive algoritmer. Nu skal vi imidlertid hjælpe en flok munke med deres livsopgave...

 Michael E. Caspersen, 2000Introducerende objektorienteret programmering7A.10 Verdens centrum 64 skiver skal flyttes fra A til C via B. En ad gangen og aldrig en større oven på en mindre. BAC

 Michael E. Caspersen, 2000Introducerende objektorienteret programmering7A.11 Simpelt tilfælde BACBAC

 Michael E. Caspersen, 2000Introducerende objektorienteret programmering7A.12 Hvad med to? BACBAC BACBAC

 Michael E. Caspersen, 2000Introducerende objektorienteret programmering7A.13 Og tre? BACBAC BACBAC A,C A,BC,B

 Michael E. Caspersen, 2000Introducerende objektorienteret programmering7A.14 Tre, fortsat BACBAC BACBAC B,A B,CA,C

 Michael E. Caspersen, 2000Introducerende objektorienteret programmering7A.15 Hvad med fem eller ti? BAC BAC

 Michael E. Caspersen, 2000Introducerende objektorienteret programmering7A.16 Den gode idé BACBAC BACBAC

 Michael E. Caspersen, 2000Introducerende objektorienteret programmering7A.17 Algoritmen Flyt (5, A, C): Flyt(4, A, B) Flyt(1, A, C) Flyt(4, B, C) Flyt (N, A, C): Flyt(N-1, A, B) Flyt(1, A, C) Flyt(N-1, B, C) 5,A,C 4,A,B4,B,C 1,A,C N,A,C N-1,A,BN-1,B,C 1,A,C

 Michael E. Caspersen, 2000Introducerende objektorienteret programmering7A.18 Og i Java void flyt(int n, int s, int d, int t) { // pre: n >= 1 // post: der er udskrevet hvordan man flytter // n skiver fra s til d via t // s: source, d: destination, t: temporary if ( n==1 ) { System.out.println(s + ” -> “ + d); } else { flyt(n-1, s, t); flyt(1, s, d, 0); flyt(n-1, t, d); }

 Michael E. Caspersen, 2000Introducerende objektorienteret programmering7A.19 Output for n=5 1 -> 3 1 -> 2 3 -> 2 1 -> 3 2 -> 1 2 -> 3 1 -> 3 1 -> 2 3 -> 2 3 -> 1 2 -> 1 3 -> 2 1 -> 3 1 -> 2 3 -> 2 2 -> 1 2 -> 3 1 -> 3 2 -> 1 3 -> 2 3 -> 1 2 -> 1 2 -> 3 1 -> 3 1 -> 2 3 -> 2 1 -> 3 2 -> 1 2 -> 3 1 -> 3

 Michael E. Caspersen, 2000Introducerende objektorienteret programmering7A.20 n # flytninger n ? Hvor mange flytninger?

 Michael E. Caspersen, 2000Introducerende objektorienteret programmering7A.21 Hvor meget printerpapir?  1,845 x linier pr. kolonne 5 kolonner pr. side 2 sider pr. ark 2500 ark pr. kasse (25 x 40 x 40 cm 3 ) 50 kasser pr. m 2...