2016-05-22 5 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 - значение