使用 Javascript 数组对数字进行因式分解
Factorialize a number using Javascript arrays
我尝试制作一个函数,它接受一个参数,并将小于参数的每个数字放入到零并将其推入数组(降序)。然后使用 for 循环将数组的每个索引乘以下一个索引,但我的 return 返回 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);
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
在第一次迭代中,arrayOfFactorial
的长度为 1,i 将等于 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-您正在将一个数组推入 arrayOfFactorial
,然后尝试将一个数字与一个数组相乘。虽然它在数学上是合法的,但在 javascript 中却不是。
你应该使用 arrayOfFactorial.push(i);
2-您不需要数组。你可以只使用 factorial = factorial * i
3-根据您的解释,您应该使用 2 个循环。第二个动作,应该在不同的循环中。
4-你return有些东西,但你不打印它。
如果无法解决问题,请查看 Dij 的回答。
您案例中的数组未用于计算。你想做的可能是这样的:
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 循环中乘以阶乘来计算它。像这样:
function factorialize(num) {
var factorial = 1
for(var i = num;i > 0; i--){
factorial = factorial * i
}
return factorial;
}
我认为使用 while
循环更容易,而且您不需要创建数组。
function factorialize(num) {
let res = 1;
while (num > 0) res *= num--;
return res;
};
console.log(factorialize(10));
如果你坚持使用数组,使用 es6 展开运算符的版本可能是
function factorialize(num) {
return [...Array(num).keys()]
.reduce((a, b) => a * (b + 1), 1)
}
console.log(factorialize(10));
我尝试制作一个函数,它接受一个参数,并将小于参数的每个数字放入到零并将其推入数组(降序)。然后使用 for 循环将数组的每个索引乘以下一个索引,但我的 return 返回 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);
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
在第一次迭代中,arrayOfFactorial
的长度为 1,i 将等于 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-您正在将一个数组推入 arrayOfFactorial
,然后尝试将一个数字与一个数组相乘。虽然它在数学上是合法的,但在 javascript 中却不是。
你应该使用 arrayOfFactorial.push(i);
2-您不需要数组。你可以只使用 factorial = factorial * i
3-根据您的解释,您应该使用 2 个循环。第二个动作,应该在不同的循环中。
4-你return有些东西,但你不打印它。
如果无法解决问题,请查看 Dij 的回答。
您案例中的数组未用于计算。你想做的可能是这样的:
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 循环中乘以阶乘来计算它。像这样:
function factorialize(num) {
var factorial = 1
for(var i = num;i > 0; i--){
factorial = factorial * i
}
return factorial;
}
我认为使用 while
循环更容易,而且您不需要创建数组。
function factorialize(num) {
let res = 1;
while (num > 0) res *= num--;
return res;
};
console.log(factorialize(10));
如果你坚持使用数组,使用 es6 展开运算符的版本可能是
function factorialize(num) {
return [...Array(num).keys()]
.reduce((a, b) => a * (b + 1), 1)
}
console.log(factorialize(10));