我正在学习javascript。我写了一个无递归函数,我想返回给定数字的阶乘。
function factorialize(n) {
for(var i = 0; i < n; i++) {
n *= i;
}
return n;
}
factorialize(5);
所以结果应为120
我不断获得0
答案 0 :(得分:3)
您正在从0循环到n ...将0中的任何数字乘以0将为0 另外一件事,你将它循环到n并在每个循环中用i递增,它进入无限循环
将其更改为以下
function factorialize(n) {
var length=n;
if(n==0) return 1;
for(var i = 1; i < length; i++) {
n *= i;
}
return n;
}
console.log(factorialize(5));
希望有所帮助
答案 1 :(得分:1)
您的代码中有两个(好的,三个)错误:
首先i
必须从1
开始(而不是0
),然后升至f - 1
,否则在第一次迭代时,它将设置为0
(其中f
是你需要因子化的数字 - 注意我改变了函数的参数)
其次,您不能将n
用于for
循环的上限和计算结果。所以你需要另一个变量(这是我添加f
的原因)。
function factorialize(f) {
var n = f;
for(var i = 1; i < f; i++) {
n *= i;
}
return n;
}
但是在这里(在我上面的代码段中)还有一个第三个错误:因为0
的阶乘应该是1,该函数将返回n
({{跳过1}}循环。)
因为阶乘通常表示为for
,我会用这种方式重写以上所有内容:
1 * 2 * 3 * ... * f
这最后一个函数也会为function factorialize(f)
{
var res,
i;
res = 1;
for( i = 1; i <= f, i++ )
{
res *= i;
}
return res;
}
提供正确的结果。
最后,唯一的余数是检查否定factorialize(0)
。
答案 2 :(得分:1)
你应该从1开始到n。
function factorialize(n) {
var ret = 1;
for(var i = 1; i <= n; i++) {
ret *= i;
}
return ret;
}
在原始代码中,i
从0
开始。结果始终为0
,0 * (any number)
将导致0
。
答案 3 :(得分:1)
使用您的代码:
然后你返回0
“ i ”必须从1开始,否则,在每个循环中乘以0。
我没有提供解决方案,因为您已经收到了很多正确答案。
答案 4 :(得分:0)
请试试这个:
function factorialize(n) {
var p=1;
for(var i = 1; i <=n; i++) {
p*=i;
}
return p;
}
答案 5 :(得分:0)
你实际上是在做这个
n =(5 * 0 * 1 * 2 * 3 * 4 * 5 * 6)