Post on 26-Mar-2015
Diskrete Mathe11 2 3 4 5 6 7
Diskrete Mathematik I
Rekursion
Vorlesung 3
Diskrete Mathe11 2 3 4 5 6 71
• Das Prinzip der Rekursion• Beispiel: Fakultätsfunktion
Übersicht
Diskrete Mathe11 2 3 4 5 6 72
Rekursion im Bild
Diskrete Mathe11 2 3 4 5 6 7
• Eine rekursive Definition reduziert ein Problem auf ein kleineres Problem derselben Art.
• Eine rekursive Funktion setzt eine rekursive Definition in ein Programm um.
Das Prinzip der Rekursion
3
Diskrete Mathe11 2 3 4 5 6 7
Beispiel: Fakultätsfunktion
Definition: Für n 0 gilt
A 1x
0,)!1(*
0,1!
nnn
nn
4
Diskrete Mathe11 2 3 4 5 6 7
Programmkonstrukte von Java
• if (Bedingung) Anweisung1;else Anweisung2;
Wenn die Bedingung erfüllt ist, führe Anweisung1 aus,sonst Anweisung 2
• int my_function(...){
......return Integer_Ausdruck; .....
}
Aufruf: int i = my_function(...);
Die Funktion my_function liefert den integer-Ausdruck zurück, der hinter return steht.
5
Diskrete Mathe11 2 3 4 5 6 7
int fak(int n){ if(n==0) return 1; else if (n>0) return n * fak(n-1); else return -1;}
A 9x
Fakultät
0,)!1(*
0,1!
nnn
nn
6
Diskrete Mathe11 2 3 4 5 6 7
A 29x
int fak(int n){ if(n==0) return 1; else if (n>0) return n * fak(n-
1); else return -1;}
fak(4)n = 4
7
Diskrete Mathe11 2 3 4 5 6 7
A 29x
int fak(int n){ if(n==0) return 1; else if (n>0) return n * fak(n-
1); else return -1;}
4 != 0
fak(4)
7
Diskrete Mathe11 2 3 4 5 6 7
A 29x
int fak(int n){ if(n==0) return 1; else if (n>0) return n * fak(n-
1); else return -1;}
4 > 0
fak(4)
7
Diskrete Mathe11 2 3 4 5 6 7
A 29x
int fak(int n){ if(n==0) return 1; else if (n>0) return n * fak(n-
1); else return -1;}
4 * fak(3)
fak(4)
7
Diskrete Mathe11 2 3 4 5 6 7
A 29x
int fak(int n){ if(n==0) return 1; else if (n>0) return n * fak(n-
1); else return -1;}
4 * fak(3)
fak(4)
fak(4)=4*fak(3)
fak(3)
n = 3
7
Diskrete Mathe11 2 3 4 5 6 7
A 29x
int fak(int n){ if(n==0) return 1; else if (n>0) return n * fak(n-
1); else return -1;}
4 * fak(3)
fak(4)
fak(4)=4*fak(3)
3 != 0
fak(3)
7
Diskrete Mathe11 2 3 4 5 6 7
A 29x
int fak(int n){ if(n==0) return 1; else if (n>0) return n * fak(n-
1); else return -1;}
4 * fak(3)
fak(4)
fak(4)=4*fak(3)
3 > 0
fak(3)
7
Diskrete Mathe11 2 3 4 5 6 7
A 29x
int fak(int n){ if(n==0) return 1; else if (n>0) return n * fak(n-
1); else return -1;}
4 * fak(3)
fak(4)
fak(4)=4*fak(3)
3 * fak(2)
fak(3)
7
Diskrete Mathe11 2 3 4 5 6 7
A 29x
int fak(int n){ if(n==0) return 1; else if (n>0) return n * fak(n-
1); else return -1;}
fak(4)=4*fak(3)
4 * fak(3)
fak(4)=4*fak(3)
3 * fak(2)
fak(3)3 * fak(2)
fak(3)=3*fak(2)
fak(2)
7
Diskrete Mathe11 2 3 4 5 6 7
A 29x
int fak(int n){ if(n==0) return 1; else if (n>0) return n * fak(n-
1); else return -1;}
fak(4)=4*fak(3)
4 * fak(3)
fak(4)=4*fak(3)
3 * fak(2)
fak(3)3 * fak(2)
fak(3)=3*fak(2)
2 * fak(1)
fak(2)
7
Diskrete Mathe11 2 3 4 5 6 7
A 29x
int fak(int n){ if(n==0) return 1; else if (n>0) return n * fak(n-
1); else return -1;}
4 * fak(3)
fak(4)=4*fak(3)
4 * fak(3)
fak(4)=4*fak(3)
3 * fak(2)
fak(3)=3*fak(2)
3 * fak(2)
fak(3)=3*fak(2)
2 * fak(1)
fak(2)2 * fak(1)
fak(2)=2*fak(1)
fak(1)
7
Diskrete Mathe11 2 3 4 5 6 7
A 29x
int fak(int n){ if(n==0) return 1; else if (n>0) return n * fak(n-
1); else return -1;}
4 * fak(3)
fak(4)=4*fak(3)
4 * fak(3)
fak(4)=4*fak(3)
3 * fak(2)
fak(3)=3*fak(2)
3 * fak(2)
fak(3)=3*fak(2)
2 * fak(1)
fak(2)=2*fak(1)
1 * fak(0)
fak(1)
7
Diskrete Mathe11 2 3 4 5 6 7
A 29x
int fak(int n){ if(n==0) return 1; else if (n>0) return n * fak(n-
1); else return -1;}4 * fak(3)
fak(4)=4*fak(3)
4 * fak(3)
fak(4)=4*fak(3)
4 * fak(3)
fak(4)=4*fak(3)
3 * fak(2)
fak(3)=3*fak(2)
3 * fak(2)
fak(3)=3*fak(2)
4 * fak(3)
fak(3)=3*fak(2)
2 * fak(1)
fak(2)=2*fak(1)
3 * fak(2)
fak(2)=2*fak(1)
1 * fak(0)
fak(1)2 * fak(1)
fak(1)=1*fak(0)
fak(0)
7
Diskrete Mathe11 2 3 4 5 6 7
A 29x
int fak(int n){ if(n==0) return 1; else if (n>0) return n * fak(n-
1); else return -1;}4 * fak(3)
fak(4)=4*fak(3)
4 * fak(3)
fak(4)=4*fak(3)
4 * fak(3)
fak(4)=4*fak(3)
3 * fak(2)
fak(3)=3*fak(2)
3 * fak(2)
fak(3)=3*fak(2)
4 * fak(3)
fak(3)=3*fak(2)
2 * fak(1)
fak(2)=2*fak(1)
3 * fak(2)
fak(2)=2*fak(1)
1 * fak(0)
fak(1)2 * fak(1)
fak(1)=1*fak(0)
n = 0
fak(0)
7
Diskrete Mathe11 2 3 4 5 6 7
A 29x
int fak(int n){ if(n==0) return 1; else if (n>0) return n * fak(n-
1); else return -1;}4 * fak(3)
fak(4)=4*fak(3)
4 * fak(3)
fak(4)=4*fak(3)
4 * fak(3)
fak(4)=4*fak(3)
3 * fak(2)
fak(3)=3*fak(2)
3 * fak(2)
fak(3)=3*fak(2)
4 * fak(3)
fak(3)=3*fak(2)
2 * fak(1)
fak(2)=2*fak(1)
3 * fak(2)
fak(2)=2*fak(1)
1 * fak(0)
fak(1)2 * fak(1)
fak(1)=1*fak(0)
1
fak(0)
7
Diskrete Mathe11 2 3 4 5 6 7
A 29x
int fak(int n){ if(n==0) return 1; else if (n>0) return n * fak(n-
1); else return -1;}4 * fak(3)
fak(4)=4*fak(3)
4 * fak(3)
fak(4)=4*fak(3)
4 * fak(3)
fak(4)=4*fak(3)
3 * fak(2)
fak(3)=3*fak(2)
3 * fak(2)
fak(3)=3*fak(2)
4 * fak(3)
fak(3)=3*fak(2)
2 * fak(1)
fak(2)=2*fak(1)
3 * fak(2)
fak(2)=2*fak(1)
1 * fak(0)
fak(1)2 * fak(1)
fak(1)=1*fak(0)
fak(0) = 1
7
Diskrete Mathe11 2 3 4 5 6 7
A 29x
int fak(int n){ if(n==0) return 1; else if (n>0) return n * fak(n-
1); else return -1;}4 * fak(3)
fak(4)=4*fak(3)
4 * fak(3)
fak(4)=4*fak(3)
4 * fak(3)
fak(4)=4*fak(3)
3 * fak(2)
fak(3)=3*fak(2)
3 * fak(2)
fak(3)=3*fak(2)
4 * fak(3)
fak(3)=3*fak(2)
2 * fak(1)
fak(2)=2*fak(1)
3 * fak(2)
fak(2)=2*fak(1)
1 * fak(0)
fak(1)fak(0) = 1
fak(1)=1*fak(0)
7
Diskrete Mathe11 2 3 4 5 6 7
A 29x
int fak(int n){ if(n==0) return 1; else if (n>0) return n * fak(n-
1); else return -1;}4 * fak(3)
fak(4)=4*fak(3)
4 * fak(3)
fak(4)=4*fak(3)
4 * fak(3)
fak(4)=4*fak(3)
3 * fak(2)
fak(3)=3*fak(2)
3 * fak(2)
fak(3)=3*fak(2)
4 * fak(3)
fak(3)=3*fak(2)
2 * fak(1)
fak(2)=2*fak(1)
3 * fak(2)
fak(2)=2*fak(1)
fak(1) = 1*1
7
Diskrete Mathe11 2 3 4 5 6 7
A 29x
int fak(int n){ if(n==0) return 1; else if (n>0) return n * fak(n-
1); else return -1;}4 * fak(3)
fak(4)=4*fak(3)
4 * fak(3)
fak(4)=4*fak(3)
4 * fak(3)
fak(4)=4*fak(3)
3 * fak(2)
fak(3)=3*fak(2)
3 * fak(2)
fak(3)=3*fak(2)
4 * fak(3)
fak(3)=3*fak(2)
2 * fak(1)
fak(2)=2*fak(1)
3 * fak(2)
fak(2)=2*fak(1)
fak(1) = 1
7
Diskrete Mathe11 2 3 4 5 6 7
A 29x
int fak(int n){ if(n==0) return 1; else if (n>0) return n * fak(n-
1); else return -1;}4 * fak(3)
fak(4)=4*fak(3)
4 * fak(3)
fak(4)=4*fak(3)
4 * fak(3)
fak(4)=4*fak(3)
3 * fak(2)
fak(3)=3*fak(2)
3 * fak(2)
fak(3)=3*fak(2)
4 * fak(3)
fak(3)=3*fak(2)
2 * fak(1)
fak(2)=2*fak(1)
fak(1) = 1
fak(2)=2*fak(1)
7
Diskrete Mathe11 2 3 4 5 6 7
A 29x
int fak(int n){ if(n==0) return 1; else if (n>0) return n * fak(n-
1); else return -1;}4 * fak(3)
fak(4)=4*fak(3)
4 * fak(3)
fak(4)=4*fak(3)
4 * fak(3)
fak(4)=4*fak(3)
3 * fak(2)
fak(3)=3*fak(2)
3 * fak(2)
fak(3)=3*fak(2)
4 * fak(3)
fak(3)=3*fak(2)
fak(2) = 2*1
7
Diskrete Mathe11 2 3 4 5 6 7
A 29x
int fak(int n){ if(n==0) return 1; else if (n>0) return n * fak(n-
1); else return -1;}4 * fak(3)
fak(4)=4*fak(3)
4 * fak(3)
fak(4)=4*fak(3)
4 * fak(3)
fak(4)=4*fak(3)
3 * fak(2)
fak(3)=3*fak(2)
3 * fak(2)
fak(3)=3*fak(2)
4 * fak(3)
fak(3)=3*fak(2)
fak(2) = 2
7
Diskrete Mathe11 2 3 4 5 6 7
A 29x
int fak(int n){ if(n==0) return 1; else if (n>0) return n * fak(n-
1); else return -1;}4 * fak(3)
fak(4)=4*fak(3)
4 * fak(3)
fak(4)=4*fak(3)
4 * fak(3)
fak(4)=4*fak(3)
3 * fak(2)
fak(3)=3*fak(2)
3 * fak(2)
fak(3)=3*fak(2)
fak(2) = 2
fak(3)=3*fak(2)
7
Diskrete Mathe11 2 3 4 5 6 7
A 29x
int fak(int n){ if(n==0) return 1; else if (n>0) return n * fak(n-
1); else return -1;}4 * fak(3)
fak(4)=4*fak(3)
4 * fak(3)
fak(4)=4*fak(3)
4 * fak(3)
fak(4)=4*fak(3)
3 * fak(2)
fak(3)=3*fak(2)
fak(3) = 3*2
7
Diskrete Mathe11 2 3 4 5 6 7
A 29x
int fak(int n){ if(n==0) return 1; else if (n>0) return n * fak(n-
1); else return -1;}4 * fak(3)
fak(4)=4*fak(3)
4 * fak(3)
fak(4)=4*fak(3)
4 * fak(3)
fak(4)=4*fak(3)
3 * fak(2)
fak(3)=3*fak(2)
fak(3) = 6
7
Diskrete Mathe11 2 3 4 5 6 7
A 29x
int fak(int n){ if(n==0) return 1; else if (n>0) return n * fak(n-
1); else return -1;}4 * fak(3)
fak(4)=4*fak(3)
4 * fak(3)
fak(4)=4*fak(3)
fak(3) = 6
fak(4)=4*fak(3)
7
Diskrete Mathe11 2 3 4 5 6 7
A 29x
int fak(int n){ if(n==0) return 1; else if (n>0) return n * fak(n-
1); else return -1;}4 * fak(3)
fak(4)=4*fak(3)
4 * fak(3)
fak(4)=4*fak(3)
fak(4) = 4*6
fak(4)=4*fak(3)
7
Diskrete Mathe11 2 3 4 5 6 7
A 29x
int fak(int n){ if(n==0) return 1; else if (n>0) return n * fak(n-
1); else return -1;}4 * fak(3)
fak(4)=4*fak(3)
fak(4) = 24
7