Rekursion
SEW Rekursion Seite 1
Rekursion
Bei der rekursiven Programmierung ruft sich eine Methode
(Prozedur oder Funktion) selbst wieder auf.
main()
return 4
callMe(1)
return 4
callMe(2)
return 4
callMe(3)
return count
callMe(4)
SEW Rekursion Seite 2
Rekursion
Wesentliche Merkmale rekursiver Programmierung:
• Abbruchbedingung!
• Man soll sich in jeder Rekursionsstufe mehr der
Abbruchbedingung nähern - das zu lösende
Problem soll kleiner werden.
SEW Rekursion Seite 3
Beispiel 1: Fakultätsberechnung
Die Fakultät (auch Faktorielle genannt) ist eine mathematische
Funktion:
Fakultät(n) = 1 * 2 * ... * n
Fakultät(0) = 1
Beispiel:
5! = 1 * 2 * 3 * 4 * 5 = 120
4! = 1 * 2 * 3 * 4
3! = 1 * 2 * 3
oder
5! = 4! * 5
4! = 3! * 4
4
3! = 2! * 3
2! = ??? 1! = ??? 0! = 1
SEW Rekursion Seite 4
Faktorielle: Iterative Lösung
Die Methode „factorial“ ermittelt zum Parameter „n“ das Produkt
aller Zahlen zwischen 1 und n.
SEW Rekursion Seite 5
Faktorielle: Rekursiver Ansatz
Beispiel: 75! = 75 * 74 * 73 * …. * 2 * 1
75! = 75 * 74!
74! = 74 * 73 * 72 * … * 2 * 1
74! = 74 * 73!
Rekursive Definition:
factorial(n) := n * factorial(n-1) für n > 0 => Abstieg
factorial(0) := 1 => Ausstieg
SEW Rekursion Seite 6
Faktorielle: Rekursive Lösung
Aufgabe:
Entwirf den rekursiven Algorithmus für die Methode
long factorial(int n)
SEW Rekursion Seite 7
Faktorielle Rekursiv: Ablauf
Beispiel: 4! = 4 * 3 * 2 * 1 = 24
Main()
return 4 * 6
factorial(4)
return 3 * 2
factorial(3)
return 2 * 1
factorial(2)
return 1 * 1
factorial(1)
return 1
factorial(0)
SEW Rekursion Seite 8
Beispiel 2: Multiplikation
Aufgabe:
• Entwirf einen rekursiven Algorithmus
für die Multiplikation zweier
Operanden a und b.
• Dabei soll der Operand b a-Mal mit
sich selbst addiert werden.
11
SEW Rekursion Seite 11
Beispiel 3: Fibonacci-Folge
Aufgabe:
Entwirf den rekursiven Algorithmus für die
Methode
SEW Rekursion Seite 12