Laufzeitanalyse
-
Hi Leute,
Ich soll bei dem folgenden Programmcodeausschnitt erklären, was es macht und die Laufzeit dazu berechnen. Jedoch scheitert es bereits bei dem Erkennen der Aufgabe des Programms.int Pow2(int n) { if (n > 0){ return (Pow2(n-1) + Pow2(n-1)); } else { return 1; } }
Was ich sehe, ist, dass es wohl gar nichts berechnet, sondern einfach nur Pow2 aufruft und zwar jedes mal mit n-1, bis n=0. Also effektiv macht das Programm doch gar nichts. Und wegen der Laufzeit, so ruft sich das Programm doch selbst N mal auf, aber das ganze 2x weil man 2x Pow2 hat. Also sähe die O-Notation doch am Ende so aus: O(2*n)=O(n).
Was sagt ihr dazu? Danke schon mal für eure Hilfe.
mfg
RiceBall
-
Diese Pow2 geben auch einen Wert zurück und damit wird gerechnet.
Pow2(1) = Pow2(0)+Pow(0) = 1 + 1 = 2
Pow2(2) = Pow2(1)+Pow(1) = Pow2(0)+Pow(0) + Pow2(0)+Pow(0) = 1+1 + 1+1 = 2 + 2 = 4
Pow2(3) = Pow2(2)+Pow(2) = (wir wissen jetzt das Pow2(2) 4 ist) = 4 + 4 = 8
...Und Pow2 wird 2 mal in Pow2 aufgerufen.
-
ach jaaa.... pow2(0) hab ich außer Acht gelassen. Jetzt macht das ganze auch Sinn und ich kann daimt arbeiten...^^. Vielen Dank für die Hilfe.