Methode / Vorgehen um Rekursionen nachzuvollziehen

yxy

Lieutenant
Registriert
Juli 2014
Beiträge
552
Hallo,

gibt es irgend eine gute Darstellungsform / Methode um Rekursionen nachzuvollziehen?
Z.B. möchte ich unteren Code von Hand (das heißt ohne Debugger etc.) nachvollziehen und vorhersagen was er auf dem Bildschirm ausgibt, wenn man ihn laufen lässt.
Wie würdet Ihr das machen?

Code:
   // package VerknuepfungVonObjekten;

public class Test {

    public static int step(int num) {
        int result = 0;
        if (num < 5) {
            return num;
        }
        System.out.printf("\n num: %3d ", num);
        switch (num % 3) {
            case 0:
                return step(num + 1);
            case 1:
                return step(num - 2);
            case 2:
                return step(num - 2);
        }
        return result;
    }

    public static int foo(int up, int down) {
        int result;
        if (up >= down) {
            return up;
        }
        System.out.printf("\n up: %3d ", up);
        result = foo(up + 1, down - 1); 
        result = result + foo(up, down - 2); 
        return result;
    }

    public static void main(String[] args) {
        int result;
        result = step(10);
        System.out.printf("\n step result : %d \n", result);
        result = foo(1, 7);
        System.out.printf("\n foo result : %d \n", result);
    }
}
 
Am einfachsten: Einfach die Ausgabe ein wenig einrücken bei rekursiven Aufrufen (sprich: Neuer Parameter recursion-level, immer +1 beim Aufruf machen, und so viele Leerzeichen vorneweg.) Solange es nicht zu tief geht, ist das die einfachste Lösung.
 
Wie? Mit Bleistift und Zettel als Liste runterschreiben was passiert.

Beispiel an step(10):

step(10): 10%3 == 1 -> step(8) wird aufgerufen
step(8): 8%3 == 2 -> step(6)
....usw...

Das machst du bis du am Ende der Rekursion angekommen bist.
Dann den Weg rückwärts welche Werte zurückgegeben werden (Tip: die Return-Statements sind recht einfach)

Dann machst du das selbe nochmal für Foo.
 
@Anteru:
Danke, aber da braucht man die Entwicklungsumgebung.
Ich meine wirklich: Du hast den Code ausgedruckt vor dir liegen

@Zeroflow:
Das hört sich gut an.
 
Zuletzt bearbeitet:
Zurück
Oben