Ich bin zu dumm dazu glaub ich.
Ich würde gern etwas mehr in diese Richtung können. Wenn ich erstmal ne Formel da stehen habe, kann ich damit auch oft einigermaßen gut weiter rechnen. (Is dann ja größtenteils relativ simple Mathematik)
Aber wenn ich vom Quellcode auf diese Formel kommen soll, versagt es bei mir total. Ich komm auf alles Mögliche, aber nicht das, was die Musterlösung vorgibt.
Beispiel: Rekursive Fibonacci-Zahlen
Code:
#include <stdio.h>
int fibonacci(int n) {
if(n==0) {
return 0;
} else {
if(n==1) {
return 1;
} else {
return (fibonacci(n-1) + fibonacci(n-2));
}
}
}
int main(int argc, char * argv[]) {
int n=50;
printf("Fibonacci(%d) = %d\n", n, fibonacci(n));
return 0;
}
Ja, ich weiß, es ist nicht besonders clever die Fibonacci-Zahlen rekursiv zu berechnen, weil das deutlich zu langsam ist. Es geht auch gar nicht darum einen effizienten Algorithmus zu finden, sondern das ich lernen möchte, die Laufzeit von sowas zu berechnen.
So weit ich das verstanden habe, wird die Funktion fibonacci durch den rekursiven Aufruf auf der untersten Ebene 2x aufgerufen, das ganze genau n/2 mal für jeden Zweig, als n/2*(2*c), da es 2 Zweige gibt 2*(n/2*(2*c)). Wenn man das nach oben durchspielt, gibt es diese Aufsplittung insgesamt n/2 mal. Damit komme ich dann letztlich auf n/2*(2*(n/2*(2*c))) (Die Klammern dienen in erster Linie der Übersicht). Wenn ich das aus multipliziere komme ich auf n^2*c, da man das c wohl vernachlässigen kann, bin ich also bei n^2.
Dass das nicht stimmt weiß ich wohl auch. Die Frage ist: Wie gehts richtig?
Kann mir bitte mal jemand erklären wie man an sowas ran geht, damit es auch funktioniert?
TIA
Look