Methoden - rekursiv.

Slides:



Advertisements
Ähnliche Präsentationen
Algorithmentheorie 08 – Dynamische Programmierung (1)
Advertisements

der Universität Oldenburg
der Universität Oldenburg
der Universität Oldenburg
DES-Simulator in JAVA, objektorientiert
Informatik II – Kapitel 11
DVG Einfache Klassen Einfache Klassen. DVG Einfache Klassen 2 Strukturen Beispiel: Personendaten bestehen aus –String name –String vorname.
Java Beans von Raoul Schneider.
„Such-Algorithmen“ Zusammenfassung des Kapitels 11
Rekursion Was ist Rekursion? Was sind rekursive Methoden?
Listen Richard Göbel.
IF-ELSE-IF-Ketten Weiter mit PP..
Klassenvariable (auch Klassendaten bzw. statische Attribute genannt) und statische Methoden.
Konstruktoren.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 4 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
Abstrakter Datentyp in C++ I - Klasse -
Matthias Spohrer · TU München 8. Präsenzveranstaltung – TU Stammgelände Innenstadt Nachqualifizierungskurs für Informatiklehrkräfte.
int dezi = Integer.parseInt(args[0]); boolean vz = (dezi>=0);
Abstrakte Klassen DVG
DVG Methoden 1 Methoden. 2 int dezi = Integer.parseInt(args[0]); boolean vz = (dezi>=0); dezi = Math.abs(dezi); String Bin = ""; do { } while.
DVG Einfache Klassen 1 Einfache Klassen. 2DVG Einfache KlassenStrukturen Beispiel: Personendaten bestehen aus String name String name.
Einführung in die Programmierung Anweisungen und Datentypen
Thema: Fibonacci-Zahlen
Struktogramme IF-ELSE FOR – Schleife
Rekursion Richard Göbel.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Term {abstrakt} alsText(){abstrakt} berechnen(Belegung){abstrakt} Zahl alsText() berechnen(Belegung) double wert Variable alsText() berechnen(Belegung)
Rekursive Funktionen (Fakultät)
Einführung in die Programmierung
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Einführung in die Programmierung
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger Institut.
2.4 Rekursion Klassifikation und Beispiele
Die Grundidee Funktionsaufruf Funktionsname (Kopf) Code der Funktion
Algorithmen und Datenstrukturen Übungsmodul 8
Programmiervorkurs WS 2014/15 Methoden
SFZ FN Sj. 13/14 Python 3 Rekursion Inf K1/2 Sj 13/14
Goldener Schnitt O. Lavrova.
© 2004 Pohlig Informatik Kurse © 2004 Pohlig Informatik Kurse Der Tramp tanzt die Rekursion zünderUntersuchen(…) Basisfall Rückmeldung:
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Rekursion-
Unterprogramme / Methoden
Controller Werkstatt updaten Werkstatt ws = werkstattarray.get(werkstattId); ws.setName(name); ws.setAnsprechpartner(ansprechpartner); ws.setTelefonnummer(telefonnummer);
Java Programme nur ein bisschen objektorientiert.
2.4 Rekursion Klassifikation und Beispiele
JAVA lernen: Methoden.
Rekursion – Speicherverwaltung
Aufgaben zu Rückgabewerten
Der Abschluss einer Schlange
Nksainf.ch/oinf.
Kompetenzniveaus Lernlupe Mathematik
Zauberkünstler SIDERATO
Raphael Fischer Informatik II - Übung 05 Raphael Fischer
Die negativen Zahlen.
Grundkurs Informatik mit Java
1. Die rekursive Datenstruktur Liste 1.3 Rekursive Funktionen
REKURSION + ITERATION.
Informatik Kurse
Reklursive Grafiken Teil I
Definition Felder Konstruktor Methoden Beispiel
 Präsentation transkript:

Methoden - rekursiv

Definition von Rekursion Ein Objekt heißt rekursiv, wenn es sich selbst als Teil enthält:

Beispiel: Die Fee Auf dem Weg durch den Wald begegnet uns eine Fee. Sie spricht zu uns: »Du hast drei Wünsche frei«…. static void feeBegegnetUns() { wunsch(); } feeBegegnetUns();

Mathematische Definition: 7! = 1*2*3*4*5*6*7 2! = 1*2 1! = 1 0! = 1 7! = 1*2*3*4*5*6*7 2! = 1*2 1! = 1 0! = 1 Beispiel: Fakultät I n=0 n! = n*(n-1)! n≥1 Mathematische Definition: n! = Beispiel: 7! = 1*2*3*4*5*6*7 n = 0 => 0!=1 n! = n * (n-1)! Rekursive Definition:

Kodierung(nicht-rekursiv): 7! = 1*2*3*4*5*6*7 2! = 1*2 1! = 1 0! = 1 7! = 1*2*3*4*5*6*7 2! = 1*2 1! = 1 0! = 1 double faku(int n) { double fak=1 ; for(int i=1; i<n; i++) fak = fak*(i+1) ; return fak; } Beispiel: Fakultät II double faku(int n) { double fak=1 ; for(int i=1; i<n; i++) fak = fak*(i+1) ; return fak; } Kodierung(nicht-rekursiv): double faku(int n) { double res=1 ; for(int i=1; i<=n; i++) res = res*i ; return res; }

Beispiel: Fakultät III 7! = 1*2*3*4*5*6*7 2! = 1*2 1! = 1 0! = 1 7! = 1*2*3*4*5*6*7 2! = 1*2 1! = 1 0! = 1 double faku(int n) { double fak=1 ; for(int i=1; i<n; i++) fak = fak*(i+1) ; return fak; } Beispiel: Fakultät III double faku(int n) { double fak=1 ; for(int i=1; i<n; i++) fak = fak*(i+1) ; return fak; } Kodierung(rekursiv): Basis Fall double faku(int n) { if(n==0) return 1; return faku(n-1)*n ; } n=0 n! = n*(n-1)! n≥1 n! = Rekursiver Fall

Beispiel: Fakultät IV Visualisierung I: n=2 double faku(int n) { 7! = 1*2*3*4*5*6*7 2! = 1*2 1! = 1 0! = 1 7! = 1*2*3*4*5*6*7 2! = 1*2 1! = 1 0! = 1 double faku(int n) { double fak=1 ; for(int i=1; i<n; i++) fak = fak*(i+1) ; return fak; } Beispiel: Fakultät IV double faku(int n) { double fak=1 ; for(int i=1; i<n; i++) fak = fak*(i+1) ; return fak; } Visualisierung I: n=2 double faku(int n) { if(n==0) return 1; return n*faku(n-1) ; } double faku(int n) { if(n==0) return 1; return n*faku(n-1) ; } double faku(int n) { if(n==0) return 1; return n*faku(n-1) ; } n=1 n=0 faku(0)=1 faku(1)=1 faku(2)=2

Beispiel: Fakultät V Visualisierung II: 7! = 1*2*3*4*5*6*7 2! = 1*2 1! = 1 0! = 1 7! = 1*2*3*4*5*6*7 2! = 1*2 1! = 1 0! = 1 double faku(int n) { double fak=1 ; for(int i=1; i<n; i++) fak = fak*(i+1) ; return fak; } Beispiel: Fakultät V double faku(int n) { double fak=1 ; for(int i=1; i<n; i++) fak = fak*(i+1) ; return fak; } Visualisierung II:

Beispiel: Fakultät VI Visualisierung III: faku(3)= 3*faku(2) 2*faku(1) 7! = 1*2*3*4*5*6*7 2! = 1*2 1! = 1 0! = 1 7! = 1*2*3*4*5*6*7 2! = 1*2 1! = 1 0! = 1 double faku(int n) { double fak=1 ; for(int i=1; i<n; i++) fak = fak*(i+1) ; return fak; } Beispiel: Fakultät VI double faku(int n) { double fak=1 ; for(int i=1; i<n; i++) fak = fak*(i+1) ; return fak; } Visualisierung III: faku(3)= 3*faku(2) 2*faku(1) 1*faku(0) Basis Fall 1 1*1=1 2*1=2 6= 3*2=6

Beispiel: Fibonacci-Zahlen I 7! = 1*2*3*4*5*6*7 2! = 1*2 1! = 1 0! = 1 7! = 1*2*3*4*5*6*7 2! = 1*2 1! = 1 0! = 1 double faku(int n) { double fak=1 ; for(int i=1; i<n; i++) fak = fak*(i+1) ; return fak; } Beispiel: Fibonacci-Zahlen I double faku(int n) { double fak=1 ; for(int i=1; i<n; i++) fak = fak*(i+1) ; return fak; } Leonardo Fibonacci(1202): Wachstum einer Kaninchenpopulation Griechen, Inder: Bereits im Altertum bekannt Goldener Schnitt: Quotient zweier Folgenglieder nähert sich dem Goldenen Schnitt(1,618033…) Chartanalyse: Retracement

Beispiel: Fibonacci-Zahlen II 7! = 1*2*3*4*5*6*7 2! = 1*2 1! = 1 0! = 1 7! = 1*2*3*4*5*6*7 2! = 1*2 1! = 1 0! = 1 double faku(int n) { double fak=1 ; for(int i=1; i<n; i++) fak = fak*(i+1) ; return fak; } Beispiel: Fibonacci-Zahlen II double faku(int n) { double fak=1 ; for(int i=1; i<n; i++) fak = fak*(i+1) ; return fak; } Kodierung: Basis Fall public static double fibo(int n) { if (n<=1) return n; return fibo(n-1) + fibo(n-2) ; } a0=0; a1=1; an+2=an+1+an n≥2 gleichwertig: an=an-1+an-2 n≥2 Rekursiver Fall

Beispiel: Fibonacci-Zahlen III 7! = 1*2*3*4*5*6*7 2! = 1*2 1! = 1 0! = 1 7! = 1*2*3*4*5*6*7 2! = 1*2 1! = 1 0! = 1 double faku(int n) { double fak=1 ; for(int i=1; i<n; i++) fak = fak*(i+1) ; return fak; } Beispiel: Fibonacci-Zahlen III double faku(int n) { double fak=1 ; for(int i=1; i<n; i++) fak = fak*(i+1) ; return fak; } Simulation: https://www.cs.usfca.edu/~galles/visualization/DPFib.html

Beispiel: Fibonacci-Zahlen in Brainloller 7! = 1*2*3*4*5*6*7 2! = 1*2 1! = 1 0! = 1 7! = 1*2*3*4*5*6*7 2! = 1*2 1! = 1 0! = 1 double faku(int n) { double fak=1 ; for(int i=1; i<n; i++) fak = fak*(i+1) ; return fak; } Beispiel: Fibonacci-Zahlen in Brainloller double faku(int n) { double fak=1 ; for(int i=1; i<n; i++) fak = fak*(i+1) ; return fak; } Kodierung: >+++++++++++++++++++++++++++++++++++++++++. ------------------------------------------------<<<<.-.>.<.+ >>>>> [->+>-[>+>>]>[+[-<+>]>+>>]<<<<<<]

Beispiel: Fibonacci-Zahlen in Scratch 7! = 1*2*3*4*5*6*7 2! = 1*2 1! = 1 0! = 1 7! = 1*2*3*4*5*6*7 2! = 1*2 1! = 1 0! = 1 double faku(int n) { double fak=1 ; for(int i=1; i<n; i++) fak = fak*(i+1) ; return fak; } Beispiel: Fibonacci-Zahlen in Scratch double faku(int n) { double fak=1 ; for(int i=1; i<n; i++) fak = fak*(i+1) ; return fak; } Kodierung: set f1 to 1 set f2 to 1 set str to f1 repeat 15 set f3 to (f1 + f2) set f1 to f2 set f2 to f3 set str to join (str (join (,) f1)) say join (str (...)) http://progopedia.com/version/scratch-1.4/

Beispiel: Summe von den ersten n Zahlen 7! = 1*2*3*4*5*6*7 2! = 1*2 1! = 1 0! = 1 7! = 1*2*3*4*5*6*7 2! = 1*2 1! = 1 0! = 1 double faku(int n) { double fak=1 ; for(int i=1; i<n; i++) fak = fak*(i+1) ; return fak; } Beispiel: Summe von den ersten n Zahlen double faku(int n) { double fak=1 ; for(int i=1; i<n; i++) fak = fak*(i+1) ; return fak; } Kodierung: Basis Fall public static double summeN(int n) { if (n==0) return 0 ; return n+ summeN(n-1); } S0=0; n=0 Sn=n+Sn-1 n≥1 Rekursiver Fall

Beispiel: Potenz einer Zahl mit fester Basis 7! = 1*2*3*4*5*6*7 2! = 1*2 1! = 1 0! = 1 7! = 1*2*3*4*5*6*7 2! = 1*2 1! = 1 0! = 1 double faku(int n) { double fak=1 ; for(int i=1; i<n; i++) fak = fak*(i+1) ; return fak; } Beispiel: Potenz einer Zahl mit fester Basis double faku(int n) { double fak=1 ; for(int i=1; i<n; i++) fak = fak*(i+1) ; return fak; } Kodierung: public static double PotenzN (double a,int n) { if (n==0) return 1 ; return a* PotenzN (a,n-1); } Basis Fall P0=1; n=0 Pn=a*Pn-1 n≥1 Rekursiver Fall