Visualisierung rekursiver Funktionen



  • Hallo Leute!

    Im Studium beschäftigen wir uns mit der Visualisierung rekursiver Funktionen, Bäume usw. Gibt es eine Software, die wenn ich zum Beispiel eine rekursive Funktion eintippe, dass es mir diese visualisert und die Werte ausgibt, vielleicht mit Erklärung oder so.

    Brauche das zum besseren Verständnis?

    Grüsse

    Coolbininet



  • mit printf spicken, alles an state ausgeben und gleichzeitig den rekursionslevel festhalten. reicht doch, oder?

    meinst du die grafische anzeige von konkreten prozessen oder eines algorithmus allgemein?



  • Ich möchte die Ackermann Funktion und auch andere in einem Baum visualisiert haben, da ich mich aber mit Rekursionen schwer tue, hilft mir der Debugger und die Werte nicht wirklich.

    Grüsse Coolbininet



  • poste eine funktion. dann koennen wir ja mal sehen, wie du informationen gewinnen kannst.



  • #include <stdio.h>

    int ack(int n, int m)
    {
    int temp;

    if ((n<0)||(m<0)) return -1;
    if (n==0) return m+1;
    if (m==0) return ack(n-1,1);

    temp=ack(n, m-1);
    return ack(n-1,temp);
    }

    int main ()
    {
    printf ("%d",ack(1,2));
    }



  • mit einem

    static int aufrufzaehler;
    printf("i",++aufrufzaehler);
    

    kannste schonmal gucken, in welcher rekursionstiefe du bist.



  • Das ist sehr nett, danke!

    Leider hilft es mir immer noch nicht ganz, zu verstehen, wie der Algorithmus abgearbeitet wird, was zurückgegen wird und der Debugger schafft mich auch. Hat jemand eine Idee?

    Grüsse

    Coolbininet



  • Dann brauchst du eventuell ein paar zusätzliche Debug-Ausgaben:

    int ack(int n, int m)
    {
      static int zaehler=0;
      int temp;
    
      zaehler++;
      printf("%*cack(%d,%d):\n",zaehler,' ',n,m);
    
      if ((n<0)||(m<0))
      {
        printf("%*c=-1\n",zaehler--,' ');
        return -1;
      }
      if (n==0)
      {
        printf("%*c=%d\n",zaehler--,' ',m+1);
        return m+1;
      }
      if (m==0)
      {
        temp=ack(n-1,1)
        printf("%*c=%d\n",zaehler--,' ',temp);
        return temp;
      }
      temp=ack(n, m-1);
      printf("%*c tmp=%d\n",zaehler,' ',temp);
      temp=ack(n-1,temp);
      printf("%*c=%d\n"zaehler--,' ',temp);
      return temp;
    }
    
    int main ()
    {
    	printf ("%d",ack(1,2));
    }
    

    (jetzt wird nahezu jede Bewegung des Algorithmus dokumentiert und je nach Schachtelungstiefe unterschiedlich weit eingerückt)


Anmelden zum Antworten