• Keine Ergebnisse gefunden

Praktische Informatik I – Der Imperative Kern Einführung Rekursion

N/A
N/A
Protected

Academic year: 2021

Aktie "Praktische Informatik I – Der Imperative Kern Einführung Rekursion"

Copied!
16
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Praktische Informatik I – Der Imperative Kern Einführung Rekursion

Prof. Dr. Stefan Edelkamp

Institut für Künstliche Intelligenz

Technologie-Zentrum für Informatik und Informationstechnik (TZI) Am Fallturm 1, 28359 Bremen

+49-(0)421-218-64007 www.tzi.de/~edelkamp

(2)

Outline

1 Willkommen in Rekursien

2 Achtung Rekursion!

3 Fraktale

4 Rekursion auf Zahlen

5 Rekursion auf Strings

(3)

Zielstellung der Einheit

Sie sollen das PrinzipRekursionverstehen und die Mächtigkeit sowie Eleganz der Methode in der Informatik erkennen. Dabei werden die intuitive Problemlösung, derenSelbstbezüglichkeit sowie dieAufteilung in Teilproblemevermittelt.

Sie lernen,wie häufig Rekursion in der Informatik auftritt.

Der Unterschied zwischenrekursivenunditerativenProgrammen wird Ihnen deutlich.

Sie setzen ihre Erkenntnisse inlauffähige Programmeum.

Als längerfristiges Ziel verstehen Sie Rekursion als wesentlichen Bestandteil einer modernen Programmierspracheund wenden rekursive Problemlösungenbevorzugt an.

Sie entwickeln ein inneres Verständnis von derKomplexitäteines Programms, die sich in derAnzahl der rekursiven Aufrufe

niederschlägt.

(4)

Outline

1 Willkommen in Rekursien

2 Achtung Rekursion!

3 Fraktale

4 Rekursion auf Zahlen

5 Rekursion auf Strings

(5)

Selbstbezüge

Rekursive Definitionen sind z.B.

GNU: Abkürzung vonGNU’s not UNIX oderMise en abymeIllustrationen, z.B.

Weitere Beispiel sind Endloslieder und Geschichten, wie Ja, Ja der alte Oberförster, Hugo war sein Name . . . ;

Illustrationen von M.C. Escher (s. Bild); Bücher, wieDie Unendliche Geschichte; Filme, wieMatrix,. . .

(6)

Outline

1 Willkommen in Rekursien

2 Achtung Rekursion!

3 Fraktale

4 Rekursion auf Zahlen

5 Rekursion auf Strings

(7)

Immerschöne Bilder

Fraktale sind Beispiele von rekursiven Konstruktionen, ein Beispiel ist die sogennannteJulia-Menge

Wie wurden dieDarstellungen der Rekursionin diesen zwei Bildern (vermutlich) verwirklicht?

(8)

Apfelmännchen

DieMandelbrotmengeist eine Menge von Punkten, deren iterierte Auswertung einer Berechnungsvorschrift nicht gegen unendlich läuft.

NachBenoit Mandelbrotist es eine Menge vonkomplexe Zahlenc, für die die Folgezn+1=zn2−c mitz0=0konvergiert

Mit der Darstellung von komplexen Zahlen durchReal- und

Imaginärteil(r0,i0) = (0,0)und geeignetem(cr,ci)verweist sie auf die wiederholte Berechnungvonrn+1=rn2−in2+cr undin+1=2rnin+ci. Das Programm 1 ist nicht rekursiv, sonderniterativ– die Definition der Menge ist jedoch rekursiv!

Es ist erstaunlich, wie vielwenig Zeilen Programmtextbewirken können.

(9)

Programm 1:Programm zur Darstellung der Mandelbrot-Menge.

public classMandelbrot {

public voidfractal() { intk= 2;

doubley=−16;// x,y are coordinates

String magic=newString(" .:−;!/>)|iIHO∗+");

while(y++<15) {// r,i are updated String row=newString();

for(doublex=0;x<84;x++) { row=row+magic.charAt(k&15);

k= 0;

doubleimag= 0.0;

doublereal= 0.0;

doublej;

do{

j=real∗realimag∗imag−2 +x/25.0;

imag= 2∗real∗imag+y/10;

real=j;

}while(j∗j+imag∗imag<11 &&k++<111);

}

System.out.println(row);

} } }

(10)

Outline

1 Willkommen in Rekursien

2 Achtung Rekursion!

3 Fraktale

4 Rekursion auf Zahlen

5 Rekursion auf Strings

(11)

Gemeinsames Sparen

Anstattx =2k Euro alleine zu sparen, empfiehlt sich rekursiv zwei Freunde zu bemühen, die den halben Geldbetrag sparen.

Das Programm 2 folgt einem mächtigen Designprinzip für Algorithmen demDivide-and-Conquer– zu Deutsch:Teile-und-Herrsche

Programm 2:Teilen und Herrschen.

public classCollectMoney {

inttotal;

voiddac(inta) {// recursive collect function if(a<=1)// if less than one Euro left total+=a;// increase total amount else{dac(a/2);dac(a/2);}// recursive calls }

intcollect(inta) { total= 0;

dac(a);

returntotal;

} }

(12)

Outline

1 Willkommen in Rekursien

2 Achtung Rekursion!

3 Fraktale

4 Rekursion auf Zahlen

5 Rekursion auf Strings

(13)

Rückwärtsbotschaften und Palindrome

Rekursion wirkt nicht nur auf Zahlen, sondern auch auf Zeichenketten!

Das Spiegeln einerZeichenkettedurch das Prinzip der Rekursion in Programm 3 liefert für die Eingabe hallo. die Ausgabe .ollah

Nutzen Sie Namen aus Ihrem Freundeskreis, um sie als Rückwärtsbotschaftzu lesen.

Spiegeln Sie ein gespiegeltes Wort

Musikalische Rückwärtsbotschaften sind sehr beliebt, z.B. im Lied von QueenAnother One Bites the Dust

Durch marginale Erweiterung des Programms 3 entsteht einPalindrom

Dadurch lautet die Ausgabe hallo.ollah

(14)

Programm 3:Umkehrung und Palindromerstellung einer Zeichenkette.

public classReversal {

/∗∗

Printing a input string in reverse order

@param s string to be considered

@param i current index position (start with 0)

∗/

public voidreverse(String s,inti) { if(s.charAt(i) !=’.’)

reverse(s,i+1);

System.out.print(s.charAt(i));

} /∗∗

Printing a input string as palindrome

@param s string to be considered

@param i current index position (start with 0)

∗/

public voidpalindrome(String s,inti) { System.out.print(s.charAt(i));

if(s.charAt(i) !=’.’) palindrome(s,i+1);

System.out.print(s.charAt(i));

(15)

Hintergrund

Zum Test aufsyntaktische Korrektheitwerden für den Compiler in vielen Programmiersprachen rekursive Regeln festgelegt.

Merke:

Rekursion entsteht durch Selbstbezug. Für die Endlichkeit sind Verkleinerungen des Problems sowie Abbruchkriterien notwendig.

Rekursion ist der Prozess, in dem eine Funktion sich selbst als Teilfunktion aufruft. Dies erlaubt, die Funktion mehrfach zu wiederholen. Funktionen, die Rekursion beinhalten, werden rekursiv genannt.

Rekursion ist eine effektive Methode, da sie üblicherweise wenig Programmtext erfordert. Allerdings muss sie vorsichtig

implementiert werden, da sie sonst zu viele Aufrufe tätigt und nicht endet.

(16)

Diskussion

Was ist der Unterschied zwischen unendlich und rekursiv?

Warum gelten Fraktale als rekursiv, obwohl Programme keinen rekursiven Aufruf tätigen?

Wie könnten Sie mit einem Programm ein Wort auf Palindromeigenschaft prüfen?

Referenzen

ÄHNLICHE DOKUMENTE

Weil das erste Paar schon im ersten Monat Nachwuchs bekommt, kann man es verdoppeln, so dass nach einem Monat 2 Paare da sind.. Von diesen vermehrt sich das erste im zweiten

1 Falls in der i-ten Zeile die Zahl in der i-ten Spalte 0 ist, wird diese Zeile mit einer Zeile unterhalb ausgetauscht, bei der in der i-ten Spalte eine Zahl steht. Falls keine

Eine gute Wahl für X mit geringer Vergleichsanzahl ist Mergesort – einem klassischen Divide-and-Conquer Verfahren, das die zu sortierenden Daten rekursiv in kleinere Teile zerlegt..

Die Platten sind in der Größe verschieden und eine kleinere Platte darf niemals unterhalb einer größere Platte liegen!. Das folgende Bild zeigt alle möglichen Zustände mit n =

Eine zufällige Permutation kann dadurch erzeugt werden, dass für alle k aus n − 1,.. ,

 Eine Scheibe darf entweder auf leeren Stab oder auf eine größere Scheibe gesetzt werden, nicht auf kleinere Scheibe.. Towers of Hanoi

 Eine Scheibe darf entweder auf leeren Stab oder auf eine größere Scheibe gesetzt werden, nicht auf kleinere Scheibe. Towers of

Lehrstuhl für Praktische Informatik IV Universität