2016-07-29 38 views
1

JavaScript函數遞歸測試。意外的結果是測試打印的字符串「PRINTS」在Firefox控制檯中顯示兩次。我沒有看到''返回'打印''被擊中兩次。爲什麼字符串「PRINTS」在控制檯中顯示兩次,希望顯示一次。遞歸測試

在stackoverflow的代碼插入功能我跑了代碼,它顯示打印五次,但Firefox控制檯兩次。我在想,因爲該行在遞歸調用之後,它應該只打印一次打印。有五個遞歸調用,爲什麼這回到原來的調用五次,代碼的最後一行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

isEven返回執行後繼續。 –

+0

如果你想在返回「PRINTS」的行之前返回一些東西,你可以調用if(number%2 == 0)返回「even」;否則返回「奇數」;否則遞歸將繼續。 –

回答

3

您需要返回遞歸調用備份鏈的結果。

因爲它是現在,這裏是你的代碼做什麼:

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") 

所有這些`返回「打印」是不是你要找的機器人。

實際的代碼更改留給讀者練習。

相關問題