II.3.1 Rekursive Algorithmen - 1 -

Ähnliche Dokumente
1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays)

1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays)

Vorkurs Informatik WiSe 17/18

Vorkurs Informatik WiSe 16/17

FHZ. K13 Rekursion. Lernziele. Hochschule Technik+Architektur Luzern Abteilung Informatik, Fach Programmieren. Inhalt

! 1. Rekursive Algorithmen.! 2. Rekursive (dynamische) Datenstrukturen. II.3.2 Rekursive Datenstrukturen - 1 -

1. Rekursive Algorithmen 2. Rekursive (dynamische) Datenstrukturen

Speicher und Adressraum

Rekursive Funktionen

Institut fu r Informatik

Rekursive Funktionen

Programmiertechnik Methoden, Teil 2

Erste Java-Programme (Scopes und Rekursion)

11. Rekursion. - Wiederholung von Anweisungen: durch Iteration und Rekursion - Anwendungsfälle der Rekursion

Rekursion. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

12. Rekursion Grundlagen der Programmierung 1 (Java)

Einführung in die Programmierung WS 2009/10. Übungsblatt 7: Imperative Programmierung, Parameterübergabe

Java - Programmierung - Prozedurale Programmierung 1

9 Türme von Hanoi Bewege Stapel von links nach rechts. In jedem Zug darf genau ein Ring bewegt werden. Es darf nie ein größerer auf einen kleine

Städtisches Gymnasium Olpe Java Ht Informatik - Q1 Die Klasse List im Abitur Methoden und Beispielcode Hier alle wichtigen Methoden. Ein Beispielcode

EINFÜHRUNG IN DIE PROGRAMMIERUNG

II.1.1. Erste Schritte - 1 -

Software Entwicklung 1. Rekursion. Beispiel: Fibonacci-Folge I. Motivation. Annette Bieniusa / Arnd Poetzsch-Heffter

Beim rekursiven Aufruf einer Funktion wird jeweils ein Duplikat der gesamten Funktion im Speicher abgelegt.

CoMa 04. Java II. Paul Boeck. 7. Mai Humboldt Universität zu Berlin Institut für Mathematik. Paul Boeck CoMa 04 7.

C++ - Kontrollstrukturen Teil 2

Programmiertechnik Übungen zu Klassen & -methoden

Objektorientierte Programmierung

Stack. Seniorenseminar Michael Pohlig

II.1.1. Erste Schritte - 1 -

Rekursion. Sie wissen wie man Programme rekursiv entwickelt. Sie kennen typische Beispiele von rekursiven Algorithmen

Klassenvariablen, Klassenmethoden

11. Rekursion. 1, falls n 1. n (n 1)!, andernfalls. Mathematische Rekursion. Rekursion in Java: Genauso! Unendliche Rekursion. n!

Algorithmen und Datenstrukturen II

Übersicht. Übersicht. Einführung Funktionen in Java Rekursion. 4 Funktionen (in Java) Einführung Funktionen in Java Rekursion

Schnittstellen, Stack und Queue

4. Fortgeschrittene Algorithmen 4.1 Rekursion 4.2 Daten und Datenstrukturen 4.3 Bäume

12. Rekursion. 1, falls n 1. n (n 1)!, andernfalls. Lernziele. Mathematische Rekursion. Rekursion in Java: Genauso! n! =

Inhalt. 7 Rekursionen Eine unendliche Geschichte Fakultät Türme von Hanoi Dr.

! 1. Erste Schritte! 2. Einfache Datentypen! 3. Anweisungen und Kontrollstrukturen! 4. Verifikation! 5. Reihungen (Arrays) II.1.4. Verifikation - 1 -

1 2 3 Bewege Stapel von links nach rechts. In jedem Zug darf genau ein Ring bewegt werden. Es darf nie ein größerer auf einen kleineren Ring gelegt we

EINFÜHRUNG IN DIE PROGRAMMIERUNG

11. Rekursion, Komplexität von Algorithmen

Algorithmen und Datenstrukturen Tafelübung 4. Jens Wetzl 15. November 2011

Hallo Welt für Fortgeschrittene

Kapitel 8: Rekursion. Grundbegriffe Beispiele. Teile-und-Herrsche-Verfahren. Endrekursion Rekursion und Keller

Programmierkurs Java

public static void main(string[] args) {

PK-Einstufungstest. 1. Allgemeine Multiple-Choice-Aufgaben. Aufgabe 1.1. Alle Aufgaben beziehen sich auf Java.

Wiederholung Wozu Methoden? Methoden Schreiben Methoden Benutzen Rekursion?! Methoden. Javakurs 2012, 3. Vorlesung

Aufgabe 1 (12 Punkte)

Übung Informatik I - Programmierung - Blatt 2

Vorkurs Informatik Wintersemester 2015/2016. Programmtexte

Fakultät IV Elektrotechnik/Informatik

EINI LW/WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure Vorlesung 2 SWS WS 14/15

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Ein Algorithmus heißt rekursiv, wenn er sich selbst aufruft. Meist werden nur einzelne Module eines Gesamtalgorithmus rekursiv verwendet.

ALPII Objektorientierte Programmierung

Kapitel 7: Rekursion. Inhalt. Rekursion: Technik Rekursion vs. Iteration

Aufgabenblatt: Arrays

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Grundlagen der Programmierung Prof. H. Mössenböck. 6. Methoden

Fragenkatalog ESOP WS 16/17

1. Teilklausur Gruppe A. Bitte in Druckschrift leserlich ausfüllen!

7. Einführung in C++ Programmieren / Algorithmen und Datenstrukturen 1 Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt

! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete. II.4.2 Abstrakte Klassen und Interfaces - 1 -

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

Transkript:

1. Grundelemente der Programmierung 2. Objekte, Klassen und Methoden 3. Rekursion und dynamische Datenstrukturen 4. Erweiterung von Klassen und fortgeschrittene Konzepte II.3.1 Rekursive Algorithmen - 1 -

1. Rekursive Algorithmen 2. Rekursive (dynamische) Datenstrukturen II.3.1 Rekursive Algorithmen - 2 -

Fakultät public static int fak (int x) { int res = 1; while (x > 1) { res = x * res; x = x - 1; return res; iterativ public static int fak (int x) { if (x > 1) return x * fak (x - 1); else return 1; rekursiv II.3.1 Rekursive Algorithmen - 3 -

Fibonacci-Zahlen (nicht-lineare Rekursion) fib( x) = fib( x 1) 0, 1 + fib( x 2) x x x < 1 = 1 2 public static int fib (int x) { if (x < 1) return 0; else if (x = = 1) return 1; else return fib (x - 1) + fib (x - 2); nicht-linear II.3.1 Rekursive Algorithmen - 4 -

even & odd (verschränkte Rekursion) public static boolean even (int x) { if (x = = 0) return true; else if (x > 0) return odd (x - 1); else return odd (x + 1); verschränkt public static boolean odd (int x) { if (x = = 0) return false; else if (x > 0) return even (x - 1); else return even (x + 1); verschränkt II.3.1 Rekursive Algorithmen - 5 -

sqrt (Endrekursion) public static float sqrt (float ug, float og, float x) { float m, epsilon = 1e-3f; m = (ug + og) / 2; if (og - ug <= epsilon)return m; else if (m * m > x) return sqrt (ug, m, x); else return sqrt (m, og, x); Endrekursion public static int fak (int x) { if (x > 1) return x * fak (x - 1); else return 1; II.3.1 Rekursive Algorithmen - 6 -

sqrt (Endrekursion) public static float sqrt (float ug, float og, float x) { float m, epsilon = 1e-3f; m = (ug + og) / 2; if (og - ug <= epsilon)return m; else if (m * m > x) return sqrt (ug, m, x); else return sqrt (m, og, x); float m, epsilon = 1e-3f; for (;;) { m = (ug + og) / 2; if (og - ug <= epsilon)return m; else if (m * m > x) og = m; else ug = m; II.3.1 Rekursive Algorithmen - 7 -

Speicherorganisation bei Rekursion public static int fak (int x) { if (x > 1) return x * fak (x - 1); else return 1; x 3 res x * fak(x - 1) x 2 res x * fak(x - 1) Aufruf: fak(3) x 1 1 res 1 II.3.1 Rekursive Algorithmen - 8 -

Speicherorganisation bei Rekursion public static int fak (int x) { if (x > 1) return x * fak (x - 1); else return 1; x 3 res x 2 x * fak(x - 1) 2 res 2 x * fak(x - 1) Aufruf: fak(3) 1 II.3.1 Rekursive Algorithmen - 9 -

Speicherorganisation bei Rekursion public static int fak (int x) { if (x > 1) return x * fak (x - 1); else return 1; x 3 res 6 x * fak(x - 1) 2 Aufruf: fak(3) II.3.1 Rekursive Algorithmen - 10 -

Aufgabe: Türme von Hanoi bewege die Scheiben von ALPHA über DELTA nach OMEGA es darf immer nur eine Scheibe bewegt werden niemals darf eine Scheibe auf eine kleinere bewegt werden ALPHA OMEGA DELTA Lösung (Divide & Conquer): allgemeine Lösung für einen Turm der Höhe h von ALPHA nach OMEGA h = 0 h > 0 gar nichts machen 1. Turm der Höhe h-1 von ALPHA über OMEGA nach DELTA 2. (Unterste) Scheibe von ALPHA nach OMEGA legen 3. Turm der Höhe h-1 von DELTA über ALPHA nach OMEGA II.3.1 Rekursive Algorithmen - 11 -

public class Hanoi { Türme von Hanoi private static void bewegeturm (int hoehe, String von, String ueber, String nach) { if (hoehe > 0) { bewegeturm (hoehe-1, von, nach, ueber); druckezug (hoehe, von, nach); bewegeturm (hoehe-1, ueber, von, nach); private static void druckezug (int hoehe, String von, String nach) { System.out.println ("Scheibe " + hoehe + " von " + von + " nach " + nach); public static void main (String [] args) { bewegeturm(integer.parseint(args[0]), "ALPHA", "DELTA", "OMEGA"); II.3.1 Rekursive Algorithmen - 12 -

Türme von Hanoi 3 ALPHA DELTA OMEGA 2 ALPHA OMEGA DELTA Scheibe 2 von ALPHA nach DELTA 1 OMEGA ALPHA DELTA Scheibe 1 von OMEGA nach DELTA Scheibe 3 von ALPHA nach OMEGA 2 DELTA ALPHA OMEGA 1 DELTA OMEGA ALPHA Scheibe 1 von DELTA nach ALPHA Scheibe 2 von DELTA nach OMEGA ALPHA OMEGA DELTA II.3.1 Rekursive Algorithmen - 13 -

Türme von Hanoi 3 ALPHA DELTA OMEGA 2 ALPHA OMEGA DELTA Scheibe 2 von ALPHA nach DELTA 1 OMEGA ALPHA DELTA Scheibe 1 von OMEGA nach DELTA Scheibe 3 von ALPHA nach OMEGA 2 DELTA ALPHA OMEGA 1 DELTA OMEGA ALPHA Scheibe 1 von DELTA nach ALPHA Scheibe 2 von DELTA nach OMEGA ALPHA OMEGA DELTA II.3.1 Rekursive Algorithmen - 14 -

Türme von Hanoi 3 ALPHA DELTA OMEGA 2 ALPHA OMEGA DELTA Scheibe 2 von ALPHA nach DELTA 1 OMEGA ALPHA DELTA Scheibe 1 von OMEGA nach DELTA Scheibe 3 von ALPHA nach OMEGA 2 DELTA ALPHA OMEGA 1 DELTA OMEGA ALPHA Scheibe 1 von DELTA nach ALPHA Scheibe 2 von DELTA nach OMEGA ALPHA OMEGA DELTA II.3.1 Rekursive Algorithmen - 15 -

Türme von Hanoi 3 ALPHA DELTA OMEGA 2 ALPHA OMEGA DELTA Scheibe 2 von ALPHA nach DELTA 1 OMEGA ALPHA DELTA Scheibe 1 von OMEGA nach DELTA Scheibe 3 von ALPHA nach OMEGA 2 DELTA ALPHA OMEGA 1 DELTA OMEGA ALPHA Scheibe 1 von DELTA nach ALPHA Scheibe 2 von DELTA nach OMEGA ALPHA OMEGA DELTA 1 II.3.1 Rekursive Algorithmen - 16 -

Türme von Hanoi 3 ALPHA DELTA OMEGA 2 ALPHA OMEGA DELTA Scheibe 2 von ALPHA nach DELTA 1 OMEGA ALPHA DELTA Scheibe 1 von OMEGA nach DELTA Scheibe 3 von ALPHA nach OMEGA 2 DELTA ALPHA OMEGA 1 DELTA OMEGA ALPHA Scheibe 1 von DELTA nach ALPHA Scheibe 2 von DELTA nach OMEGA ALPHA OMEGA DELTA 1 2 II.3.1 Rekursive Algorithmen - 17 -

Türme von Hanoi 3 ALPHA DELTA OMEGA 2 ALPHA OMEGA DELTA Scheibe 2 von ALPHA nach DELTA 1 OMEGA ALPHA DELTA Scheibe 1 von OMEGA nach DELTA Scheibe 3 von ALPHA nach OMEGA 2 DELTA ALPHA OMEGA 1 DELTA OMEGA ALPHA Scheibe 1 von DELTA nach ALPHA Scheibe 2 von DELTA nach OMEGA ALPHA OMEGA DELTA 1 2 II.3.1 Rekursive Algorithmen - 18 -

Türme von Hanoi 3 ALPHA DELTA OMEGA 2 ALPHA OMEGA DELTA Scheibe 2 von ALPHA nach DELTA 1 OMEGA ALPHA DELTA Scheibe 1 von OMEGA nach DELTA Scheibe 3 von ALPHA nach OMEGA 2 DELTA ALPHA OMEGA 1 DELTA OMEGA ALPHA Scheibe 1 von DELTA nach ALPHA Scheibe 2 von DELTA nach OMEGA ALPHA OMEGA DELTA 1 2 II.3.1 Rekursive Algorithmen - 19 -

Türme von Hanoi 3 ALPHA DELTA OMEGA 2 ALPHA OMEGA DELTA Scheibe 2 von ALPHA nach DELTA 1 OMEGA ALPHA DELTA Scheibe 1 von OMEGA nach DELTA Scheibe 3 von ALPHA nach OMEGA 2 DELTA ALPHA OMEGA 1 DELTA OMEGA ALPHA Scheibe 1 von DELTA nach ALPHA Scheibe 2 von DELTA nach OMEGA ALPHA OMEGA DELTA 1 2 3 II.3.1 Rekursive Algorithmen - 20 -