Verständnisproblem bei einer Rekursion



  • #include <stdio.h>
    
    int fakultaet(int n);
    
    int main()
    {
      int n;
    
      printf(" n  n!\n");
      for (n = 1; n <= 12; n++)
        printf("%2d  %d\n", n, fakultaet(n));
      getchar();
      return 0;
    }
    
    int fakultaet(int n)
    {
    
    if (n > 1)
    
       return n * fakultaet(n-1);
    
      return 1;
    }
    

    Entschuldigt meine unendliche Dummheit, ich verstehe leider nicht wie Zeile 23 funktionieren soll. Der Code ist ein Beispielcode aus dem Buch >>Programmieren lernen für Teens<< vom Autor Bernd Brügmann.

    Meine Denkweise: Der Funktion fakultaet() wird ein Wert übergeben, dieser Wert wiederum wird im if Block geprüft, ob er größer als 1 sei. Falls nein, wird der if Block übersprungen und es wird 1 als Rückgabewert übergeben. Anderfalls sollte sich via return die Funktion selbst aufrufen und zwar sollte sich der übergebene Wert n beim ersten Aufruf sich mit dem selbst aufgerufenen n-1 multiplizieren. Dann wird n-1 zum "neuen n" also 3 dieser wird wiederrum mit dem wieder selbst aufgerufenen Wert n-1 also 2 multipliziert.

    43
    3
    2

    ... macht ja dann 72!?

    4! = 4*3*2*1 = 24

    😕



  • Hallo

    Vielleicht kann dir das Kapitel 11.20 im Buch "C von A bis Z" etwas zu deinem Verständnis beitragen.

    http://www.win-tux.de/c_011_019.htm#RxxobKap0110190400277A1F04618C

    Dieses Kapitel behandelt ausführlich die Arbeit mit rekursiven Funktionen sowie die allgemeine Funktionsweise des Stacks bei Funktionsaufrufen...

    Grüsse, Ratio



  • schreib's dir einfach aus

    fakultaet(4)
      4*fakultaet(3)
      4*3*fakultaet(2)
      4*3*2*fakultaet(1)
      4*3*2*1
    

Anmelden zum Antworten