2017-03-17 19 views
-1

Eloquent Javascriptの第2章の2番目のエクササイズでは、nのように50のような0を返して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

デバッガのコードを参照してください。 –

+0

もちろん、 'return n%2 == 0'を代わりに使うことができます... –

答えて

1

あなたは、文が実行されます場合は、次ISEVEN関数に50を渡す場合:

else 
    return isEven(n - 2); 

これは、それがif (n == 0)条件がトリガされた時点で0になるまでマイナスnに続く再帰スタックコールを開きます真はスタック全体に返されます。

数値が不均一な場合、最終結果はn==1の条件が真となり、偽が返されます。