Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Rekursion Klaus Becker (2002). KB Rekursion 2 Teil 1 Rekursive Algorithmen.

Ähnliche Präsentationen


Präsentation zum Thema: "Rekursion Klaus Becker (2002). KB Rekursion 2 Teil 1 Rekursive Algorithmen."—  Präsentation transkript:

1 Rekursion Klaus Becker (2002)

2 KB Rekursion 2 Teil 1 Rekursive Algorithmen

3 KB Rekursion 3 Türme von Hanoi 1883 hatte der französische Mathematiker Edouard Lucas jene kleine Geschichte ersonnen, die fortan als die Geschichte der Türme von Hanoi selbst Geschichte machte: Im Großen Tempel von Benares, unter dem Dom, der die Mitte der Welt markiert, ruht eine Messingplatte, in der drei Diamantnadeln befestigt sind, jede eine Elle hoch und so stark wie der Körper einer Biene. Bei der Erschaffung der Welt hat Gott vierundsechzig Scheiben aus purem Gold auf eine der Nadeln gesteckt, wobei die größte Scheibe auf der Messingplatte ruht, und die übrigen, immer kleiner werdend, eine auf der anderen. Das ist der Turm von Brahma. Tag und Nacht sind die Priester unablässig damit beschäftigt, den festgeschriebenen und unveränderlichen Gesetzen von Brahma folgend, die Scheiben von einer Diamantnadel auf eine andere zu setzen, wobei der oberste Priester nur jeweils eine Scheibe auf einmal umsetzen darf, und zwar so, dass sich nie eine kleinere Scheibe unter einer größeren befindet. Sobald dereinst alle vierundsechzig Scheiben von der Nadel, auf die Gott sie bei der Erschaffung der Welt gesetzt hat, auf eine der anderen Nadeln gebracht sein werden, werden der Turm samt dem Tempel und allen Brahmanen zu Staub zerfallen, und die Welt wird mit einem Donnerschlag untergehen.

4 KB Rekursion 4 Türme von Hanoi Aufgabe: Versuchen Sie, 4 (einfach) bzw. 5 oder 6 (schwieriger) Scheiben von Platz A nach Platz C nach den Regeln der Priester von Benares zu bringen. Benutzen Sie das Simulationsprogramm Hanoi. Wenn Sie es geschafft haben, überlegen Sie sich, wie lang es dauert, einen Turm aus 64 Scheiben umzubauen, wenn man 1 Sekunde benötigt, um eine Scheibe zu bewegen. ABC

5 KB Rekursion 5 Problembeschreibung Bringe n-Stapel von A über B nach C ABC ABC AZ: ZZ:

6 KB Rekursion 6 Lösungsidee A B C AZ: ZZ: A B C A B C A B C...

7 KB Rekursion 7 Struktur der Lösungsidee A B C Bringe (n-1)-Stapel von A über C nach B A B C A B C A B C Bringe Scheibe von A nach C Bringe (n-1)-Stapel von B über A nach C

8 KB Rekursion 8 Rekursive Problemreduktion Bringe (n-1)-Stapel von A über C nach B Bringe Scheibe von A nach C Bringe (n-1)-Stapel von B über A nach C Bringe n-Stapel von A über B nach CProblem: Lösung: Beachte: Die Lösung reduziert das Problem auf ein strukturgleiches Problem in verkleinerter Form (rekursive Problemreduktion).

9 KB Rekursion 9 Rekursiver Algorithmus Bringe (n-1)-Stapel von X über Z nach Y Bringe Scheibe von X nach Z Bringe (n-1)-Stapel von Y über X nach Z Bringe n-Stapel von X über Y nach ZAlgorithmus wenn n> 1 dann Beachte: Der Algorithmus ruft sich selbst auf, er ist infolgedessen rekursiv. sonst Bringe Scheibe von X nach Z

10 KB Rekursion 10 Rekursiver Algorithmus Hanoi(n-1, X,Z,Y) Bringe Scheibe von X nach Z Hanoi(n-1, Y, X, Z) Hanoi(n: integer; X,,Y, Z: char)Algorithmus wenn n> 1 dann Beachte: Der Algorithmus ruft sich selbst auf, er ist infolgedessen rekursiv. sonst Bringe Scheibe von X nach Z

11 KB Rekursion 11 Abarbeitung rekursiver Algorithmen ALG. Hanoi(n: integer; X,,Y, Z: char) WENN n> 1 DANN Hanoi(n-1, X,Z,Y) Bringe Scheibe von X nach Z Hanoi(n-1, Y, X, Z) SONST Bringe Scheibe von X nach Z Hanoi(3, A, B, C) Hanoi(2, A, C, B) Hanoi(1, A, B, C) Bringe Scheibe von A nach C Bringe Scheibe von A nach B Hanoi(1, C, A, B) Bringe Scheibe von C nach B Bringe Scheibe von A nach C Hanoi(2, B, A, C) Hanoi(1, B, C, A) Bringe Scheibe von B nach A Bringe Scheibe von B nach C Hanoi(1, A, B, C) Bringe Scheibe von A nach C Wiederholte Ausführung des Algorithmus, bis die Abbruchbedingung erfüllt ist.

12 KB Rekursion 12 Übung Sie sollen einen Turm mit 4 Scheiben umschichten. Gehen Sie dabei nach dem entwickelten rekursiven Algorithmus vor. Notieren Sie sich zunächst sämtliche Scheibenbewegungen. Testen Sie sie anschließend mit dem Simulationsprogramm. ALG. Hanoi(n: integer; X,,Y, Z: char) WENN n> 1 DANN Hanoi(n-1, X,Z,Y) Bringe Scheibe von X nach Z Hanoi(n-1, Y, X, Z) SONST Bringe Scheibe von X nach Z

13 KB Rekursion 13 Zusammenfassung Wird vom System übernommen. Entwurf:Ausführung: Muss vom Entwickler geleistet werden. Entwurfsstrategie: Reduziere das Problem auf ein strukturgleiches Problem in verkleinerter Form, sofern das Problem nicht direkt lösbar ist. ALG. Hanoi(n: integer; X,,Y, Z: char) WENN n> 1 DANN Hanoi(n-1, X,Z,Y) Bringe Scheibe von X nach Z Hanoi(n-1, Y, X, Z) SONST Bringe Scheibe von X nach Z Hanoi(3, A, B, C) Hanoi(2, A, C, B) Hanoi(1, A, B, C) Bringe Scheibe von A nach C Bringe Scheibe von A nach B Hanoi(1, C, A, B) Bringe Scheibe von C nach B Bringe Scheibe von A nach C Hanoi(2, B, A, C) Hanoi(1, B, C, A) Bringe Scheibe von B nach A Bringe Scheibe von B nach C Hanoi(1, A, B, C) Bringe Scheibe von A nach C

14 KB Rekursion 14 Quicksort 27 Zahlen: anfang ende 6 Zahlen: anfang ende Quicksort(anfang, ende) ZZ: AZ: Eine Reihung von Zahlen /... soll der Größe nach sortiert werden.

15 KB Rekursion 15 Quicksort 27 Zahlen: anfang ende ALGORITHMUS Quicksort(anfang, ende: tIndex) 27 Zahlen: anfang ende zerlege(links, rechts) linksrechts p links 6 Zahlen: anfang ende WENN anfang < rechts Quicksort(anfang, rechts) rechtslinks 6 Zahlen: anfang ende WENN links < ende Quicksort(links, ende) rechtslinks links := anfang; rechts := ende;

16 KB Rekursion 16 Quicksort ALGORITHMUS Quicksort(anfang, ende: tIndex) zerlege(links, rechts); WENN anfang < rechts Quicksort(anfang, rechts); WENN links < ende Quicksort(links, ende); links := anfang; rechts := ende; Vorbereitung Rekursive Reduktions- schritte Abbruch- bedingung Bemerkung: Kurzer Algorithmus, der einen komplexen Ablauf festlegt. Entwurfsstrategie: Reduziere das Problem auf ein strukturgleiches Problem in verkleinerter Form, sofern das Problem nicht direkt lösbar ist.

17 KB Rekursion 17 Teil 2 Turtle-Grafik

18 KB Rekursion 18 Turtle-Grafik Die Turtle lebt auf einer Zeichenfläche. Die Turtle kann sich bewegen, drehen und – zum Zeichnen – eine Spur hinterlassen. Zeichen- fläche Turtlespur Turtle

19 KB Rekursion 19 Turtle-Grafik Die Turtle agiert auf Befehle / führt Anweisungen aus. Draw(100)

20 KB Rekursion 20 Turtle-Grafik Die Turtle kann neue Befehle lernen. Diese werden in Turtle-Programmen festgelegt. Quadrat procedure Quadrat; begin with Turtle do begin Draw(100); Turn(90); Draw(100); Turn(90); Draw(100); Turn(90); Draw(100); Turn(90); end; end;

21 KB Rekursion 21 Die Turtle als Objekt Turtle TTurtle Attribute XPos: double // x-Position YPos: double // y-Position Angle: double // Richtung Color: TColor// Zeichenfarbe... Ereignisse... Methoden... (0|0)(688|0) (0|452)(688|452) Die Turtle wird als ein Objekt der Klasse TTurtle erzeugt. Sie besitzt infolgedessen charakteristische Eigenschaften ( Attribute) und kann charakteristische Operationen ausführen ( Methoden).

22 KB Rekursion 22 Die Turtle als Objekt TTurtle Attribute... Ereignisse... Methoden Init // Die Turtle wird in die Mitte der Zeichenfläche mit Blickrichtung nach rechts gesetzt. Draw(d: double) // Die Turtle zeichnet in der aktuell. Blickrichtung eine Strecke der Länge d. DrawTo(x,y: double) // Die Turtle zeichnet eine Strecke zum Punkt (x|y). Turn(a: double) // Die Turtle dreht sich um den Winkel a (a > 0: Linksdr.; a < 0: Rechtsdr.). TurnTo(a: double) // Die Turtle setzt ihre Blickricht. nach a (a = 0: rechts; a = 90: oben;...). Move(d: double) // Die Turtle bewegt sich – ohne zu zeichnen – um d in Blickrichtung. MoveTo(x,y: double) // Die Turtle bewegt sich – ohne zu zeichnen – zum Punkt (x|y). Clear // Die Zeichenfläche der Turtle wird gelöscht....

23 KB Rekursion 23 Zeichnen mit der Turtle procedure Quadrat(x: real); var i: integer; begin for i := 1 to 4 do begin Turtle.Draw(x); Turtle.Turn(90); end; end; AZ: ZZ: Al: Quadrat(200);

24 KB Rekursion 24 Zeichnen mit der Turtle procedure Quadrat(x: real); var i: integer; begin with Turtle do begin for i := 1 to 4 do begin Draw(x); Turn(90); end; end; end; AZ: ZZ: Al: Quadrat(200); Quadrat

25 KB Rekursion 25 Übungen Entwickeln Sie ein Turtle-Programm, mit dem man einen (primitiven) Tannenbaum zeichnen kann. Gehen Sie wie folgt vor: Überlegen Sie sich zunächst, aus welchen Bestandteilen der Tannenbaum besteht. Formulieren Sie anschließend die Algorithmen für die Bestandteile. Implementieren und testen Sie die Algorithmen abschließend mit Hilfe der Turtle-Komponente.

26 KB Rekursion 26 Übungen Entwickeln Sie ein Turtle-Programm, mit dem man einen Quadratturm (beliebiger) Höhe zeichnen kann. Formulieren Sie zunächst die benutzten Algorithmen. Implementieren und testen Sie die Algorithmen abschließend mit Hilfe der Turtle-Komponente.

27 KB Rekursion 27 Teil 3 Selbstähnliche Figuren

28 KB Rekursion 28 Selbstähnlichkeit

29 KB Rekursion 29 Selbstähnlichkeit Eine Figur ist selbstähnlich, wenn sie sich in Teile zerlegen lässt, die zur ihr ähnlich sind.

30 KB Rekursion 30 Rekursive Problemreduktion Baum(200) Turtle.Draw(200); Turtle.Turn(45); Baum(100); Turtle.Turn(-90); Baum(100); Turtle.Turn(45); Turtle.Move(-200); Baum(200) Baum(100) Rekursive Problemreduktion: Draw(200) Baum(x) // falls x < 2 // keine Operationen Trivialer Fall:

31 KB Rekursion 31 Rekursiver Algorithmus Algorithmus Baum(Stamm: real) WENN Stamm >= 2 DANN Turtle.Draw(Stamm); Turtle.Turn(45); Baum(Stamm/2); Turtle.Turn(-90); Baum(Stamm/2); TurtleTurn(45); Turtle.Move(-Stamm);

32 KB Rekursion 32 Übungen Suchen Sie sich auf den folgenden Seiten eine selbstähnliche Figur aus und entwickeln Sie für diese ein Turtle-Zeichenprogramm. Gehen Sie wie folgt vor: Machen Sie sich (exemplarisch) einen rekursiven Problemreduktionsschritt klar. Überlegen Sie sich, was im trivialen Fall erfolgen soll (nichts /...). Formulieren Sie einen rekursiven Algorithmus und implementieren ihn mit Hilfe der Turtle-Komponente.

33 KB Rekursion 33 Schachtelhalm

34 KB Rekursion 34 Busch

35 KB Rekursion 35 Teufelsgabel

36 KB Rekursion 36 Treppe ins Nirgendwo

37 KB Rekursion 37 Quadratpflanze

38 KB Rekursion 38 Sierpinski-Dreieck

39 KB Rekursion 39 Pythagoras-Baum

40 KB Rekursion 40 Farn

41 KB Rekursion 41 Koch-Kurve

42 KB Rekursion 42 Variationen der Koch-Kurve


Herunterladen ppt "Rekursion Klaus Becker (2002). KB Rekursion 2 Teil 1 Rekursive Algorithmen."

Ähnliche Präsentationen


Google-Anzeigen