Faktultät

Guten Tag,

kann mir vielleicht jemand erklären wie die Rechnung des folgenden Codes abläuft?
Ich verstehe nicht ganz wie die Funktion versteht 5x4x3x2x1 rechnen zu müssen, wenn ich dem Ablauf folge, müsste er doch 5 x 4 rechnen und selbst wenn sich die Funktion, wie eine Schleife selbst aufruft, verstehe ich nicht ganz warum er an dem bereit errechnetem nun den neuen y-Wert also in diesem Fall x 3 hintenanhängt ich hätte eher 4x3 erwartet…

        return y==0? 1 : (y*CalcFac(y=y-1));
    }
    
    public static void main(String[] args) {
        System.out.println(CalcFac(5));
    }```

„ich hätte eher 4x3 erwartet…“
ist zu ungenau für Informatiker-Dasein,

du musst schon glasklar einsetzen/ überlegen, was passiert:
CalcFac für y=5 aufgerufen
→ Rückgabe 5*CalcFac(4)

was ist CalcFac(4)? genauso knallhart überlegen, ‚das wird wohl 4 sein‘ ist unrealistisch und methodisch unzureichend :wink:
erst danach kann man beurteilen, was CalcFac(5) letztlich zurückgibt

das weitere Aufdröseln ergibt hoffentlich ein Muster, notfalls halt Schritt für Schritt manuell abarbeiten

Die Methode ruft sich solange wieder auf, bis y == 0 ist. Das heißt es ergibt sich folgendes:

   CalcFac(5) 
= 5 * CalcFac(4) 
= 5 * 4 * CalcFac(3)
= 5 * 4 * 3 * CalcFac(2)
= 5 * 4 * 3 * 2 * CalcFac(1)
= 5 * 4 * 3 * 2 * 1 * CalcFac(0)

Nun hört die Rekursion auf, da CalcFac(0) gleich 1 ist und keinen weiteren rekursiven Aufruf produziert. Es ergibt sich:
= 5 * 4 * 3 * 2 * 1 * 1

Zur Not kann man solchen Code auch auseinander dröseln und dann mit System.out’s versehen, dann siehst du genau was passiert :slight_smile:

Vielen Dank an Alle, ich entschuldige meine vaage Formulierung und werde nun konkreter.
VIelen Dank @EikeB ich hab mich leider zu vaage ausgedrückt, es ging mir eigentlich um den Prozessorablauf.
Ich würde gerne verstehen, was und wann an ein Register geschoben und wann überschrieben wird.

Arbeitet der Prozessor die Befehlsfolge genauso ab, wie aufgeführt?
Gibt es bei NetBeans ein Tool, welches mir genau die exakte Reihenfolge der Abarbeitung zeigt und mir auch die zwischen Ergebnisse liefert?
Es wäre auch echt nett, wenn mir jemand sagen kann, ob man mit einem Tool in NetBeans die benötigte CPU Zeit ausgeben lassen kann.

[QUOTE=EikeB]Die Methode ruft sich solange wieder auf, bis y == 0 ist. Das heißt es ergibt sich folgendes:

   CalcFac(5) 
= 5 * CalcFac(4) 
= 5 * 4 * CalcFac(3)
= 5 * 4 * 3 * CalcFac(2)
= 5 * 4 * 3 * 2 * CalcFac(1)
= 5 * 4 * 3 * 2 * 1 * CalcFac(0)

Nun hört die Rekursion auf, da CalcFac(0) gleich 1 ist und keinen weiteren rekursiven Aufruf produziert. Es ergibt sich:
= 5 * 4 * 3 * 2 * 1 * 1[/QUOTE]

Hat sich bereits geklärt, habs per Zufall gefunden und auch alles verstanden :slight_smile:

Hotkey F7 :slight_smile: