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

时间:2019-05-31 21:59:11

标签: javascript function for-loop if-statement factorial

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

var newX

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

3 个答案:

答案 0 :(得分:1)

在您所说的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));

答案 1 :(得分:0)

您必须在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时,您应该返回1;而当x为负数或非整数时,您应该返回NaN。

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

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

看起来更干净。

答案 2 :(得分: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;  }; };