我的阶乘函数逻辑有什么问题?

What is wrong with my Factorial Function logic?

我正在尝试在 Chrome 的 JS 控制台中获取阶乘数。
很明显,我对for循环的理解有问题,我想知道哪一部分对我来说不合逻辑。
非常感谢您的回答<3

var newX

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

您必须删除 for 循环内的 var。另外,您应该将 newX 的声明移到函数内部。还有一些其他错误。

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

此外,为了完整起见,当 x 为 0 时应 return 1,当 x 为负数或非整数时应为 NaN。

您可以将其重写为递归函数:

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

看起来干净多了。

你说 var newX = x * i; 的地方声明了一个新变量。删除 var.
x * i 将 return x 的平方,因为最后 i 是 x。

function factorial(x) {
    var newX = 1;
    if(x > 0){
        for(var i = 1;i <= x;i++){
            newX = newX * i;
        }
        return newX;
    } else {
        return 1;
    }
};
console.log(factorial(5));
console.log(factorial(4));
console.log(factorial(0));

在循环中写 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;  }; };