Rekursion - PowerPoint PPT Presentation

About This Presentation
Title:

Rekursion

Description:

Rekursion Klaus Becker (2002) Teil 1 T rme von Hanoi T rme von Hanoi Problembeschreibung L sungsidee Struktur der L sungsidee Rekursive Problemreduktion ... – PowerPoint PPT presentation

Number of Views:76
Avg rating:3.0/5.0
Slides: 43
Provided by: Klau63
Category:

less

Transcript and Presenter's Notes

Title: Rekursion


1
Rekursion
  • Klaus Becker
  • (2002)

2
Teil 1
Rekursive Algorithmen
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
Türme von Hanoi
A
B
C
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.
5
Problembeschreibung
AZ
A
B
C
Bringe n-Stapel von A über B nach C
ZZ
A
B
C
6
Lösungsidee
AZ
A
C
B
...
A
B
C
...
A
C
B
ZZ
A
B
C
7
Struktur der Lösungsidee
A
C
B
Bringe (n-1)-Stapel von A über C nach B
A
B
C
Bringe Scheibe von A nach C
A
C
B
Bringe (n-1)-Stapel von B über A nach C
A
B
C
8
Rekursive Problemreduktion
Bringe n-Stapel von A über B nach C
Problem
Bringe (n-1)-Stapel von A über C nach B
Lösung
Bringe Scheibe von A nach C
Bringe (n-1)-Stapel von B über A nach C
Beachte Die Lösung reduziert das Problem auf ein
strukturgleiches Problem in verkleinerter Form
(rekursive Problemreduktion).
9
Rekursiver Algorithmus
Bringe n-Stapel von X über Y nach Z
Algorithmus
wenn ngt 1 dann
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
sonst
Bringe Scheibe von X nach Z
Beachte Der Algorithmus ruft sich selbst auf, er
ist infolgedessen rekursiv.
10
Rekursiver Algorithmus
Hanoi(n integer X, ,Y, Z char)
Algorithmus
wenn ngt 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
Beachte Der Algorithmus ruft sich selbst auf, er
ist infolgedessen rekursiv.
11
Abarbeitung rekursiver Algorithmen
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
ALG. Hanoi(n integer X, ,Y, Z char) WENN ngt 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
Wiederholte Ausführung des Algorithmus, bis die
Abbruchbedingung erfüllt ist.
12
Übung
ALG. Hanoi(n integer X, ,Y, Z char) WENN ngt 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
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.
13
Zusammenfassung
Entwurf
Ausführung
Wird vom System übernommen.
Muss vom Entwickler geleistet werden.
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
ALG. Hanoi(n integer X, ,Y, Z char) WENN ngt 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
Entwurfsstrategie Reduziere das Problem auf ein
strukturgleiches Problem in verkleinerter Form,
sofern das Problem nicht direkt lösbar ist.
14
Quicksort
Eine Reihung von Zahlen / ... soll der Größe
nach sortiert werden.
AZ
27
Zahlen
13
80
82
6
44
26
15
16
39
90
53
anfang
ende
Quicksort(anfang, ende)
ZZ
6
Zahlen
13
15
16
26
27
39
44
53
80
82
90
anfang
ende
15
Quicksort
ALGORITHMUS Quicksort(anfang, ende tIndex)
links anfang rechts ende
27
Zahlen
13
80
82
6
44
26
15
16
39
90
53
anfang
ende
links
rechts
zerlege(links, rechts)
p
27
Zahlen
13
39
16
6
15
26
44
82
80
90
53
anfang
ende
rechts
links
WENN anfang lt rechts Quicksort(anfang, rechts)
6
Zahlen
13
15
16
26
27
39
44
82
80
90
53
anfang
ende
rechts
links
WENN links lt ende Quicksort(links, ende)
6
Zahlen
13
15
16
26
27
39
44
53
80
82
90
anfang
ende
rechts
links
16
Quicksort
Entwurfsstrategie Reduziere das Problem auf ein
strukturgleiches Problem in verkleinerter Form,
sofern das Problem nicht direkt lösbar ist.
ALGORITHMUS Quicksort(anfang, ende tIndex)
links anfang rechts ende
Vorbereitung
zerlege(links, rechts)
WENN anfang lt rechts Quicksort(anfang, rechts)
Rekursive Reduktions-schritte
WENN links lt ende Quicksort(links, ende)
Abbruch-bedingung
Bemerkung Kurzer Algorithmus, der einen
komplexen Ablauf festlegt.
17
Teil 2
Turtle-Grafik
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
Turtle-Grafik
Die Turtle agiert auf Befehle / führt Anweisungen
aus.
Draw(100)
20
Turtle-Grafik
Die Turtle kann neue Befehle lernen. Diese
werden in Turtle-Programmen festgelegt.
Quadrat
procedure Quadratbeginwith Turtle do begin
Draw(100) Turn(90) Draw(100) Turn(90)
Draw(100) Turn(90) Draw(100)
Turn(90)endend
21
Die Turtle als Objekt
Die Turtle wird als ein Objekt der Klasse TTurtle
erzeugt. Sie besitzt infolgedessen
charakteristische Eigenschaften (? Attribute) und
kann charakteristische Operationen ausführen (?
Methoden).
TTurtle Attribute XPos double //
x-Position YPos double // y-Position Angle
double // Richtung Color TColor //
Zeichenfarbe ... Ereignisse ... Methoden ...
(00)
(6880)
Turtle
(0452)
(688452)
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 (xy). Turn(a
double) // Die Turtle dreht sich um den Winkel a
(a gt 0 Linksdr. a lt 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 (xy). Clear // Die
Zeichenfläche der Turtle wird gelöscht. ...
23
Zeichnen mit der Turtle
AZ
procedure Quadrat(x real) var i
integer beginfor i 1 to 4 do begin
Turtle.Draw(x) Turtle.Turn(90) endend
Al
Quadrat(200)
ZZ
24
Zeichnen mit der Turtle
AZ
procedure Quadrat(x real) var i
integer beginwith Turtle do begin for i
1 to 4 do begin Draw(x) Turn(90)
end endend
Al
Quadrat(200)
ZZ
Quadrat
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. Implementier
en und testen Sie die Algorithmen abschließend
mit Hilfe der Turtle-Komponente.
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
Teil 3
Selbstähnliche Figuren
28
Selbstähnlichkeit
29
Selbstähnlichkeit
Eine Figur ist selbstähnlich, wenn sie sich in
Teile zerlegen lässt, die zur ihr ähnlich sind.
30
Rekursive Problemreduktion
Rekursive Problemreduktion
Baum(200)
Baum(200) Turtle.Draw(200)
Turtle.Turn(45) Baum(100)
Turtle.Turn(-90) Baum(100)
Turtle.Turn(45) Turtle.Move(-200)
Baum(100)
Baum(100)
Trivialer Fall
Draw(200)
Baum(x) // falls x lt 2 // keine Operationen
31
Rekursiver Algorithmus
Algorithmus Baum(Stamm real) WENN Stamm gt 2
DANN Turtle.Draw(Stamm) Turtle.Turn(45)
Baum(Stamm/2) Turtle.Turn(-90)
Baum(Stamm/2) TurtleTurn(45)
Turtle.Move(-Stamm)
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
Schachtelhalm
34
Busch
35
Teufelsgabel
36
Treppe ins Nirgendwo
37
Quadratpflanze
38
Sierpinski-Dreieck
39
Pythagoras-Baum
40
Farn
41
Koch-Kurve
42
Variationen der Koch-Kurve
Write a Comment
User Comments (0)
About PowerShow.com