我尝试创建一个带参数的函数,并将每个数字小于参数的值放到零并将其推入数组(降序)。然后使用for循环将数组的每个索引乘以下一个索引,但是我的返回返回null。请帮忙。
function factorialize(num) {
var arrayOfFactorial = [];
var factorial = 1;
for(var i = num;i > 0;i--){
arrayOfFactorial.push([i]);
factorial = factorial * arrayOfFactorial[i];
}
return factorial;
}
factorialize(10);
答案 0 :(得分:1)
在第一次迭代中,arrayOfFactorial
的长度为1,并且我将等于num,这将大于1,您试图访问arrayOfFactorial[num]
,这将是未定义的,这是为什么你得到NaN。
你可以用i倍增阶乘。你也不需要另外一个阵列。
function factorialize(num) {
var arrayOfFactorial = [];
var factorial = 1;
for(var i = num;i > 0;i--){
arrayOfFactorial.push([i]); //can be removed.
factorial = factorial * i;
}
return factorial;
}
console.log(factorialize(10));
答案 1 :(得分:0)
function factorialize(num) {
var factorial = 1;
for(var i = num;i > 0;i--){
factorial = factorial * i;
}
console.log( factorial);
return factorial;
}
factorialize(10);
我认为这就是你要做的事情..我将[i]更改为i.and arrayOffactorial [i]改为i
答案 2 :(得分:0)
1 - 您正在将数组推入arrayOfFactorial
,然后尝试将数字与数组相乘。虽然它在数学上是合法的,但它不是在javascript中。
您应该使用arrayOfFactorial.push(i);
2 - 你不需要阵列。您可以使用factorial = factorial * i
3 - 根据你的解释,你应该使用2个循环。第二个动作应该处于不同的循环中。
4 - 你返回了一些东西,但你不打印它。
如果无法解决问题,请参阅Dij的答案。
答案 3 :(得分:0)
您的情况下的数组不用于计算。你试图做的可能就是:
function factorialize(num) {
var arrayOfFactorial = [];
// Push all values in the array (order not really important here)
for(var i = num;i > 0; i--){
arrayOfFactorial.push(i);
}
var factorial = 1;
for(var i = 0; i<arrayOfFactorial.length; i++) {
factorial = arrayOfFactorial[i] * factorial
}
return factorial;
}
console.log(factorialize(10));
也就是说,没有真正的意义,因为你的内存使用量会随着你试图计算的因子的大小而增长,而你并不需要继续引用所有内容。最好的方法是通过在for循环中直接乘以factorial来计算它。像这样:
function factorialize(num) {
var factorial = 1
for(var i = num;i > 0; i--){
factorial = factorial * i
}
return factorial;
}
答案 4 :(得分:0)
我认为使用while
循环可以更轻松,而且您不需要创建数组。
function factorialize(num) {
let res = 1;
while (num > 0) res *= num--;
return res;
};
console.log(factorialize(10));
如果你坚持使用数组,那么使用es6 spread运算符的版本可能是
function factorialize(num) {
return [...Array(num).keys()]
.reduce((a, b) => a * (b + 1), 1)
}
console.log(factorialize(10));