Что не так с моей логикой факториальной функции? - PullRequest
0 голосов
/ 01 июня 2019

Я пытаюсь получить факториал в консоли JS в Chrome.
Очевидно, что-то не так с моим пониманием цикла for, и я хотел бы знать, какая его часть не логична для меня.
Большое спасибо за ответы <3 </p>

var newX

function factorial(x) {
    if(x > 0){
        for(i = 1;i <= x;i++){
            var newX = x * i ;
} return newX;
};
};

Ответы [ 3 ]

1 голос
/ 01 июня 2019

Где вы сказали var newX = x * i;, это объявляет новую переменную.Удалить var.
x * i вернет квадрат x, потому что наконец i равен x.

var newX = 1;
function factorial(x) {
    if(x > 0){
        for(var i = 1;i <= x;i++){
            newX = newX * i;
        }
        return newX;
    } else {
        return 1;
    }
};
console.log(factorial(5));
0 голосов
/ 01 июня 2019

запись var newX в цикле означает создание новой переменной каждый раз, пока цикл не выполняется, и другое дело, вы умножаете x * i, но это должно быть newX * = i, чтобы удовлетворять условию факториала (т.е. каждый раз, когда вам нужно умножитьрезультат со следующим номером).

var newX=1;
function factorial(x) {    if(x > 0){
 for(i = 1;i <= x;i++){ newX *=  i ;
} return newX;  }; };
0 голосов
/ 01 июня 2019

Вы должны удалить var внутри цикла for. Также вы должны переместить объявление newX внутри функции. И есть и другие ошибки.

function factorial(x) {
    var newX = 1
    if(x > 0){
        for(i = 1;i <= x;i++){
            newX = newX * i ;
        } 
    return newX;
    }
}

Кроме того, для полноты вы должны вернуть 1, если х равен 0, и NaN, если х отрицательно или не является целым числом.

Вы можете переписать его как рекурсивную функцию:

function factorial(x) {
    if(x == 0) return 1;
    return x*factorial(x-1);
}

выглядит чище.

...