2016-07-29 9 views
1

Test der JavaScript-Funktionsrekursion. Unerwartetes Ergebnis ist der Testdruck des Strings "PRINTS", der zweimal in der Firefox-Konsole angezeigt wird. Ich sehe nicht, wie 'zurück "PRINTS"' wird zweimal getroffen.Warum wird die Zeichenfolge "PRINTS" zweimal in der Konsole angezeigt und erwartet, dass sie einmal angezeigt wird. Rekursionstest

In stackoverflow die Code-Insert-Funktion Ich lief den Code und es zeigt fünfmal PRINTS, aber Firefox-Konsole zweimal. Ich denke da die Zeile nach dem rekursiven Aufruf ist, dass es nur einmal drucken soll. Es gibt fünf rekursive Aufrufe, warum kommt das fünfmal zum ursprünglichen Aufruf zurück, die letzte Zeile des Codes console.log (isEven (11));

function isEven (number) { 
 
if (number == 0) { 
 
    return "even"; 
 

 
} 
 
else if (number == 1) { 
 
    return "odd"; 
 

 
} 
 
number = number - 2; 
 
console.log (number); 
 
//the if statements return goes to the recursive call, not outside funct call 
 
console.log(isEven(number)); 
 
return "PRINTS"; 
 
} 
 

 
console.log (isEven(11));

+0

Nach isEven wird die Ausführung fortgesetzt. –

+0

Wenn Sie etwas vor der Zeile zurückgeben möchten, die return "PRINTS" liest, können Sie aufrufen, wenn (Zahl% 2 == 0) "even" zurückgibt; sonst gib "ungerade" zurück; Andernfalls wird die Rekursion fortgesetzt. –

Antwort

3

Sie müssen die Ergebnisse der rekursiv Aufruf, um wieder zurück auf die Kette.

So wie es jetzt ist, ist hier, was Ihr Code tut:

call isEven(11) -> 
    11 == 0 false 
    11 == 1 false 
    11 - 2 = 9 
    log(9) 
    call isEven(9) -> 
    9 == 0 false 
    9 == 1 false 
    9 - 2 = 7 
    log(7) 
    call isEven(7) -> 
     7 == 0 false 
     7 == 1 false 
     7 - 2 = 5 
     log(5) 
     call isEven(5) -> 
     5 == 0 false 
     5 == 1 false 
     5 - 2 = 3 
     log(3) 
     call isEven(3) -> 
      3 == 0 false 
      3 == 1 false 
      3 - 2 = 1 
      log(1) 
      call isEven(1) -> 
      1 == 0 false 
      1 == 1 true 
      return "odd" 
      log("odd") 
      return "PRINTS" 
     log("PRINTS") 
     return "PRINTS" 
     log("PRINTS") 
     return "PRINTS" 
    log("PRINTS") 
    return "PRINTS" 
    log("PRINTS") 
    return "PRINTS" 
log("PRINTS") 

All diese `return "prints" sind nicht die Droiden Sie suchen.

Die eigentliche Codeänderung wird dem Leser als Übung überlassen.