var array = [5,4,3,2,1];
document.write("<br>Facorial: " + factorial(array));
//factorial function Ex. 5! = 5*4*3*2*1 = 120
function factorial(params){
var f = 1;
for (i = 0; i <= params.length; ++i){
for (j = 1; j <= params[i]; j++){
f = f * params[j];
}
}
return f;
}
我正在尝试创建一个程序,用户在数组中输入一堆随机数,程序会计算这些数字的不同内容。
我正在尝试将我的数组中的每个单独的数字设置为因子,然后以相同的形式呈现。
我现在如何拥有它为我的输出获得NaN。
我做错了什么?或者我可能做得不够?
CURRENT OUTPUT
Factorial: NaN
我想要什么
Factorial: 120,24,6,2,1
答案 0 :(得分:1)
您可以使用来自Felix Kling回答here的fact
函数并使用Array.map
然后Array.join
function fact(x) {
if(x == 0) return 1;
return x * fact(x-1);
}
function factorial(arr){
var result = arr.map(fact);
return result.join(",");
}
答案 1 :(得分:1)
代码中的错误(或至少:奇怪的):
f
是一个数字。你好像希望你的函数返回一个数组?i <= params.length
应为i < params.length
。数组索引从0开始,以length-1
结束。params[j]
- 其中j
是任何小于当前查找数组项的数字。这就是为什么你得到NaN
的原因 - 当i == 0
时,它会循环到j == 5
,而params[5]
是undefined
- 从而产生NaN
结果你想要的似乎是
function factorial(n) {
// function that computes the number n!
var acc = 1;
while (n > 0) acc *= n--;
return acc;
}
function facArray(params) {
var f = [];
for (var i=0; i<params.length; i++)
f[i] = factorial(params[i]);
return f;
}
答案 2 :(得分:0)
试试这段代码
var array = [5,4,3,2,1];
document.write("<br>Facorial: " + factorial(array).join(','));
function factorial(params){
var op = [];
for (i = params.length - 1; i >= 0 ; i--){
var f = 1;
for (j = 0; j < i; j++){
f = f * params[j];
}
op.push(f);
}
return op;
}
答案 3 :(得分:0)
这一切都在while
:D
var array = [5,4,3,2,1];
var len = array.length-1;
while(len--) {
array[len] *= array[len+1];
}
array;// [120, 24, 6, 2, 1]
从最后一个到第一个一个接一个地加倍。