Anzahl der rekursiven Aufrufe ermitteln
-
Hallo,
ich würde gerne die Anzahl der rekursiven Aufrufe einer Funktion ermitteln, jedoch weis ich nicht genau wie ich dies bewerkstelligen kann. Kann mir dies jemand anhand eines Beispieles wie dem der Fibonacci-Folge zeigen oder zumindest den Weg weisen?
int main() { int n; double result; for(n = 0; n <= 20; ++n) { result = fibonacci(n); printf("n %d: %.0f", n, result); } } double fibonacci(int n) { int result; if(n == 0) result = 0; else if (n == 1) result = 1; else result = (fibonacci(n-1) + fibonacci(n-2)); return result; }
Danke!
-
mit einer globalen variable, die inkrementiert wird bei jedem aufruf
-
rekursives fib() hat grob fib(n) calls, eigentlich mehr, aber grob
-
hey schrieb:
mit einer globalen variable, die inkrementiert wird bei jedem aufruf
besser mit static und dann halt inkrementieren
-
static macht aber auch nur dann wirklich Sinn wenn man sich den Zähler im Debugger anschauen will, oder die Zahl der rekursiven Aufrufe in der Funktion selbst "betrachten" will. Ansonsten müsste man die Funktion (also ihren Aufruf) extra anpassen.
-
Hallo!
Wie ist das?
void RekursiveFunktion( int Wert, int *pZaehler ) { (*pZaehler)++; if( Wert > 0 ) { Wert-- ; RekursiveFunktion( Wert, pZaehler ); } } int main(int argc, char* argv[]) { int Zaehler = 0 ; RekursiveFunktion( 5 , &Zaehler ); return 0; }
Damit wird die Variable Zaehler hochgezählt und ist in main verwendbar.
-
GV schrieb:
Damit wird die Variable Zaehler hochgezählt und ist in main verwendbar.
kannst es auch so machen
int RekursiveFunktion (int Wert) { static int z = 0; z++; if( Wert > 0 ) { Wert-- ; RekursiveFunktion (Wert); } return z; } int main(int argc, char* argv[]) { int Zaehler = 0 ; Zaehler = RekursiveFunktion (5); return 0; }
aber ich würde auch lieber eine globale variable nehmen