2016-05-22 65 views
-2

これは階乗を見つける関数です。この問題は、typeof行を追加したときに表示されます。コードは次のとおりです。この階乗関数を呼び出したときにNaNを取得するのはなぜですか?

function factorial(num) { 
    if ((typeof num) == "number") { 
     if (num < 0) { 
      error.innerHTML = "Choose a positive number or 0!"; 
     } 
     else if (num == 1 || num == 0) { 
      return 1; 
     } 
     else { 
      return num * factorial(num - 1); 
     } 
    } 
} 

私が答えたときはいつも、答えが得られず、代わりに "NaN"を取得します。

私はこのコードで順列を計算しようとしています:

Math.floor(factorial(n)/factorial(n-r)); 

それは通常の階乗ではなく、その式では動作しません。

+1

私は正しい答えを取得しています。ここで確認してください:https://jsfiddle.net/tc9cqeu4/ –

+0

それは同様の式で動作します。 https://jsfiddle.net/tc9cqeu4/2/。あなたが渡しているnとrの変数の値は何ですか?不足しているコードを追加してください。 –

+0

負の値を渡すと、関数は数値を返しません。 – ConnorsFan

答えて

1

おそらく、ファクター関数に文字列を渡しています。これは、ユーザ入力によってnが設定された場合に発生します。

factorial("9")/factorial("4")は、NaNを返します。

、数値に文字列を変換+を使用するには:

var n = +myInput.value; 
var r = +myOtherInput.value; 
console.log(Math.floor(factorial(n)/factorial(n-r))); 
+0

はい、nは