2016-12-17 6 views
-4

Ich bin neu in der Programmierung und ich sah ein Beispiel für Rekursion in einem Buch geschrieben, die mich verwirrt.Wenn 'return' eine Methode beendet, wie funktioniert diese faktorielle Rekursion?

Wenn return die Ausführung der Methode beendet, wie funktioniert das?

public class Recursion{ 

public static void main(String[] args) { 
    Scanner s = new Scanner(System.in); 
    System.out.print("Type a number -> "); 
    int n = s.nextInt(); 
    n = factorial(n); 
    System.out.println("FACTORIAL : " + n); 
} 

static private int factorial(int n) { 
    if (n == 0) { 
     System.out.println("-- REACHED ZERO! " + n); 
     return 1; // even if the method reach this condition, it doesn't stop the method, but why? 
    } 
    System.out.println("N: " + n); 
    int r = n * factorial(n - 1); 
    System.out.println("R: " + r); // even with the 'return 1;' line, this will print. But how does that works? 
    return r; 
} 

Wenn ich den Code ausführen, wird das Ergebnis wie erwartet:

Type a number -> 5 
    N: 5 
    N: 4 
    N: 3 
    N: 2 
    N: 1 
    -- REACHED ZERO! 0 
    R: 1 
    R: 2 
    R: 6 
    R: 24 
    R: 120 
    FACTORIAL : 120 
+1

'int r = n * Fakultät (n - 1)'. Ruft sich selbst an. Das ist Rekursion. –

+0

Rekursion bedeutet eine Methode, die sich selbst aufruft. in einfachen Worten, ein Mann, der seinen eigenen Zwilling anstellt, um die Berechnung zu handhaben, die er alleine behandeln kann und so weiter. Wenn also eine Methode zurückkehrt, wird die aktuelle Instanz oder das Auftreten der Methode nicht als ganzes Programm gestoppt. das heißt, der Zwilling, der am Ende geboren wurde, übergibt seine Berechnungen an seinen älteren Zwilling und stirbt. –

+0

Siehe auch http://introcs.cs.princeton.edu/java/23recursion/ (und http://www.fredosaurus.com/JavaBasics/methods/methods-25-calls.html für weitere Informationen unter der Motorhaube)). –

Antwort

0

Return das Ende aller Methoden ist, weil es einen Endwert zurück. Rekursion bedeutet, dass etwas passieren wird, bis es Null erreicht. Sobald dies der Fall ist, werden Sie 1 in Ihrer Methode zurückgeben, was bedeutet, dass es die Ausführung an einem bestimmten Punkt stoppt. Hoffe das geklärt etwas wenn ja, bitte die Antwort bitte :)

0

Denken Sie, was passiert in Zeile 5 der faktoriellen Funktion - ein Aufruf von System.out.println(). Wenn diese Methode zurückkehrt, was passiert? Nun, der Programmablauf geht weiter zur nächsten Zeile, die ein Aufruf von faktoriell ist. Wenn diese Funktion zurückkehrt, ist die Aktion identisch mit dem, was nach dem Aufruf von println passiert ist. - flow geht weiter zur nächsten Anweisung, die ein weiterer Aufruf von println ist.

0

Die return-Anweisung beendet die Ausführung der aktuellen Methode. Bei Rekursion rufen Sie die Methode mehrmals auf, sodass eine Rückgabe nur eine der vielen Ausführungen der gleichen Methode beendet.

Verwandte Themen