2016-10-10 1 views
-7

Ich kann nicht für das Leben von mir herauszufinden, warum dies 0 anstelle von 5 zurückgibt. "I" wird erhöht, bevor es die letzte return-Anweisung trifft, aber es immer 0 zurückgibt, vom ersten Aufruf im Stapel. Ich würde denken, dass seit dem letzten Aufruf auf dem Stapel die Rückkehr in den Block trifft "i == 5" erste würde es zurückgeben und drucken 5.Warum gibt Rekursion den ersten Aufruf im Stapel zurück und nicht den letzten?

Returns 0

public static void main(String[] args) { 
     System.out.println(incrementI(0)); 
}  


public static int incrementI(int i) { 
    if (i == 5){ 
     return i;   
    } else { 
     incrementI(i + 1); 
    } 

    return i;  
} 

Returns 5

public static int incrementI(int i) { 
    if (i == 5){ 
     return i;   
    } else { 
     return incrementI(i + 1); 
    }    
} 
+1

java! == javascript –

+4

Was ist 'something()' ?? Soll das "incrementI()" sein? – Pointy

+0

Was macht 'etwas (int i)'? – Pavel

Antwort

3

Stellen Sie eine solche Funktion hat geschrieben:

public static int square(int x) { 
    pow(x, 2); 
    return x; 
} 

Es wird das Quadrat von x berechnen. Aber dann wird das berechnete Quadrat nichts beeinflussen und die Funktion wird nur x zurückgeben.

schauen nun vorsichtig auf den Code

if (i == 5){ 
    return i;   
} else { 
    something(i + 1); 
} 
return i; 

Wenn i nicht 5, wird something(i + 1) aufgerufen werden. Dann wird es einen Wert zurückgeben, aber dieser Wert wird nichts beeinflussen. Und dann incrementI Funktion wird nur i zurückgeben, in Ihrem Fall ist es 0.

+0

etwas soll inrement sein(), schneller Tippfehler! – NightSkyCode

+0

@NightSkyCode, Sieht so aus, als ob du Pavels Punkt vermisst. Die Funktion "incrementI (i)" in Ihrem ersten Beispiel gibt immer "i" zurück: Es gibt sofort "5" zurück, wenn "i == 5", sonst tut es etwas und gibt dann "i" zurück. Es ist egal, was "ein paar Sachen" sind. Es spielt keine Rolle, ob "some stuff" ein Funktionsaufruf namens "something()" ist oder ob es sich um einen rekursiven Aufruf von incrementI() 'handelt. Wie auch immer, es tut was auch immer, und dann ignoriert es das Ergebnis, was auch immer passiert, und dann gibt es "i" zurück. –

Verwandte Themen