2016-09-14 3 views
-5

Просто интересно, может ли кто-нибудь сказать мне, почему это возвращает 100, а не 120? Он должен рассчитать общее количество фактора.Javascript Factorialize возвращает неверный результат

function factorialize(num) { 

    for(var i = 1; i <= num; i++) { 
    var fact = i+i;  
    total = fact * fact; 
    } 
    return total; 
} 

factorialize(5); 
+3

Тейк отладчик и шаг за шагом через код. Для этого нужен отладчик. – zerkms

+1

Научитесь решать проблемы с резиновыми подушками. Пять строк кода достаточно легки, чтобы отлаживать себя. Особенно, если это факторная функция, которая имеет миллиарды примеров по всему Интернету. – Xufox

+0

Я использую веб-инструмент, который, кажется, не обеспечивает прямой отладку кода. – theHussle

ответ

1

Если вы пытаетесь вычислить факториал, используйте этот код:

function factorialize(num) { 
    var total = 1; // Initialize the total. 0! = 1. 
    for(var i = 1; i <= num; i++) { 

    total = total * i; // Add the current index to the factors by multiplying it by the current total. 
    } 
    return total; 
} 
+0

Не могли бы вы объяснить, почему мне нужно объявить полное вне цикла? – theHussle

+0

@ theHussle, потому что это работающий продукт. Вы инициализируете его как 1, потому что случай по умолчанию, когда num равен нулю, и цикл не запускается, ответ равен 1, потому что математика. Возможно, вы захотите [прочитать факториалы] (https://en.wikipedia.org/wiki/Factorial). –

+0

Это был не совсем вопрос. @ theHussle вам необязательно объявлять переменную вне цикла (хотя это хорошая идея). Однако вам нужно назначить его начальное значение вне цикла, потому что, если вы этого не сделаете, вы просто перепишете его тем, что у вас есть на этот раз, отбросив всю работу, выполненную в предыдущих итерациях цикла – Paarth

2

Неправильный способ расчета факториала. Что происходит в вашем коде, при последнем запуске строки total = fact * fact;, fact имеет значение 10 (потому что i равно 5), поэтому 10 * 10 становится 100, и это то, что он возвращает.

1

TLDR Вы переписываете все значения fact. var привязан к функции в JS. В конце концов вы достигнете i = 5, который в конечном счете устанавливает факт в (5+5) * (5+5), который 100.

+0

Спасибо за объяснение, это имеет смысл. – theHussle

Смежные вопросы