Diskrete Mathe Diskrete Mathematik I Rekursion Vorlesung 3
Diskrete Mathe Das Prinzip der Rekursion Beispiel: Fakultätsfunktion Übersicht
Diskrete Mathe Rekursion im Bild
Diskrete Mathe 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 Mathe Beispiel: Fakultätsfunktion Definition: Für n 0 gilt A 1x 4
Diskrete Mathe Programmkonstrukte von Java if (Bedingung) Anweisung1; elseAnweisung2; 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 Mathe 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 6
Diskrete Mathe 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 Mathe 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 Mathe 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 Mathe 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 Mathe 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 Mathe 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 Mathe 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 Mathe 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 Mathe 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 Mathe 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 Mathe 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 Mathe 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 Mathe 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 Mathe 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 Mathe 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 Mathe 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 Mathe 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 Mathe 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 Mathe 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 Mathe 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 Mathe 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 Mathe 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 Mathe 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 Mathe 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 Mathe 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 Mathe 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 Mathe 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 Mathe 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