2017-03-17 65 views
-1

在第二章使用Javascript的第二個練習中,我不明白如何通過n50等於零並返回true?Eloquent Javascript中的遞歸練習

function isEven(n) { 
    if (n == 0) 
    return true; 
    else if (n == 1) 
    return false; 
    else if (n < 0) 
    return isEven(-n); 
    else 
    return isEven(n - 2); 
} 


console.log(isEven(50)); 
// → true 
console.log(isEven(75)); 
// → false 
console.log(isEven(-1)); 
// → false 

如果我在控制檯輸入:

>var x = 50; 
>50 == 0; 
>false 

返回FALSE。爲什麼是這樣?我不是英語母語的人,所以也許我沒有正確閱讀JS代碼中的東西?

+2

這很明顯是錯誤的,所以請注意下一個。 '50 == 1'也是錯誤的,所以請跳過。 '50 <0'也是錯誤的,所以最後'return isEven(n-2)',它再次運行該函數,但是與48一樣。重複46,44 ... 4,2,0。 '0 == 0'是真的。 –

+1

遍歷調試器中的代碼。 – 2017-03-17 19:33:11

+0

當然,你可以只是'返回n%2 == 0'而不是... –

回答

1

如果傳遞50到ISEVEN函數,那麼if語句被執行如下:

else 
    return isEven(n - 2); 

這樣就打開了繼續減ň,直到它變成0。在這一點上if (n == 0)條件被觸發遞歸調用堆棧然後返回到整個堆棧。

如果數字不均勻,那麼最終結果將是n==1條件將是真實的並且將返回false。