JavaScript的阶乘函数每次都返回0
My JavaScript factorial function returns 0 every time
我正在学习javascript。我写了一个非递归函数,我想返回一个给定数字的阶乘。
function factorialize(n) {
for(var i = 0; i < n; i++) {
n *= i;
}
return n;
}
factorialize(5);
所以结果应该是120
我一直得到0
您正在从0循环到n…任何数乘以0都是0另一件事,你循环到n然后在每一次循环中加1,它就进入了无限循环
将其更改为以下
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));
希望有所帮助
与您的代码:
- loop1: n = 5 * 0 | n = 0
- loop2: n = 0 * 1 | n = 0
- loop3: n = 0 * 2 | n = 0
- loop4: n = 0 * 3 | n = 0
- loop5: n = 0 * 4 | n = 0
然后返回0
"i"必须从1开始,否则在每个循环中都要乘以0。
我不提供解决方案,因为你已经收到了很多正确的答案
你应该从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
。
您的代码中有两个(好吧,三个)错误:
首先i
必须从1
(而不是0
)开始,然后上升到f - 1
,否则在第一次迭代时,它将被设置为0
(其中f
是您需要分解的数字-注意我改变了函数的参数)
第二,不能对for
循环的上界和计算结果同时使用n
。所以你需要另一个变量(这就是我添加f
的原因)。
function factorialize(f) {
var n = f;
for(var i = 1; i < f; i++) {
n *= i;
}
return n;
}
然而这里(在我上面的代码片段中也是如此)有一个第三个错误:因为0
的阶乘应该是1,函数将返回n
(跳过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)
结果。
最后检查f
是否为阴性
你真的这么做了
n = (5 * 0 * 1 * 2* 3 * 4 * 5 * 6)
请试试:
function factorialize(n) {
var p=1;
for(var i = 1; i <=n; i++) {
p*=i;
}
return p;
}
相关文章:
- 你能解释一下这个阶乘函数是如何工作的吗?
- 计算阶乘超过了Javascript中的最大整数限制
- 使用 .reduce() 对数字进行阶乘化
- 使用 VBScript 函数的阶乘
- JavaScript 中的阶乘.不行
- 递归函数 - 计数如何存储在此阶乘解决方案中
- JavaScript 阶乘递归
- 阶乘的最小有效非零位
- 如何阶乘只有 5 个数字
- Javascript,阶乘,太难了
- 通过用户提示查找数字的阶乘
- 如何在JavaScript中获取数字的阶乘
- Javascript函数计算整数的阶乘
- JavaScript的阶乘函数每次都返回0
- 阶乘函数运行错误:超过了最大调用堆栈大小
- 如何创建计算6阶乘的for循环
- 如何解释这个阶乘程序中的递归
- 如何在javascript中找到25的阶乘
- 阶乘. .我不知道为什么这个代码可以工作
- 在JavaScript中返回阶乘