我的阶乘函数逻辑有什么问题?
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; }; };
我正在尝试在 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; }; };