分解函数 JavaScript
Factorize function javascript
我在编写分解数字的函数时遇到了一个小问题。困难的部分已经完成。但是,当 num 为 0 时,我似乎无法告诉函数返回 1。
PS:你会用哪些其他方式在 JavaScript 中编写相同的函数?
var arrOfNum = [];
function factorialize(num) {
for(i = 1; i <= num; i++){
// push all numbers to array
arrOfNum.push(i);
}
// multiply each element of array
var result = arrOfNum.reduce(function(a,b){
return a * b;
});
console.log(result);
}
你已经有一个for
循环,在这个循环中,你可以一次计算阶乘,没有数组和reduce。
function factorial(num) {
var result = 1;
for(i = 2; i <= num; i++) {
result *= i;
}
return result;
}
综述:
-
缺少局部变量
i
声明var i;
-
其他使用的变量的声明在分布的函数上。更好的方法是在函数顶部声明变量。
-
Array#reduce
此任务需要一个initialValue
作为第二个参数。第一次调用回调时,
previousValue
和currentValue
可以是两个值之一。如果在 reduce 调用中提供了initialValue
,则previousValue
将等于initialValue
,currentValue
将等于数组中的第一个值。如果未提供initialValue
,则previousValue
将等于数组中的第一个值,currentValue
将等于第二个值。
function factorial(num) {
var i,
arrOfNum = [],
result;
for (i = 1; i <= num; i++) {
// push all numbers to array
arrOfNum.push(i);
}
// multiply each element of array
result = arrOfNum.reduce(function (a, b) {
return a * b;
}, 1);
document.write(num+'! = '+result + '<br>');
}
factorial(0);
factorial(1);
factorial(2);
factorial(5);
factorial(8);
您可以使用以下使用递归的方法:
function factorize(num){
if(num === 0){
return 1 ;
}
else {
return num = num * factorize(num-1);
}
}
只需返回值 1
function factorialize(num) {
if (num < 1) return 1; //this line is added
for(i = 1; i <= num; i++){
arrOfNum.push(i);
}
var result = arrOfNum.reduce(function(a,b){
return a * b;
});
console.log(result);
}
如果您给reduce
一个初始值 1
,即使没有显式检查,一切也会正常工作:
var result = arrOfNum.reduce(function(a,b){
return a * b;
}, 1);
^^^ // PROVIDE EXPLICIT INITIAL VALUE TO REDUCE
function factorial(n) {
return Array.apply(0, Array(n)).reduce(function(x, y, z) {
return x + x * z; //1+(1*0), 1+(1*1),2+(2*2), 6+(6*3), 24+(24*4), ...
}, 1);
}
演示
这是一个相当简化的函数,它返回"n"的所有因子的数组
你只需要看候选人<sqrt(n(>
对于那些不知道 | 0; 当得到 sqrt(n( 时,位是 Math.floor(( 的更快等价物
由于 factn 是在经过一些健全性检查后定义的,因此函数将返回未定义或易于检查的数组,例如 if(factors = factorize(n( { success code } sorta 结构
可以对此进行一些改进,但它们很复杂,超出了我编写它时的要求 - 具体来说,我使用它来计算大图像中的 CSS 精灵大小,方法是在图像的 x + y 维度上使用因式分解,然后创建第三个共享因子数组(这为您提供了所有可能的方形精灵大小的列表(。
function factorize(n) {
n = Number(n);
if(n) {
if(n > 1) {
var sqrtn = Math.sqrt(n) | 0;
var factn = [1, n];
var ipos = 0;
for(i = 2; i <= sqrtn; i++) {
if((n % i) == 0) {
ipos++;
if((n / i) !== i) {
factn.splice(ipos, 0, i, n / i);
} else {
factn.splice(ipos, 0, i);
}
}
}
}
}
return factn;
}
不知道为什么会有复杂的答案。一个非常简单的答案是:
var i;
function factorialOf(num) {
//Initially set factorial as number
var factorial = num;
//A for loop starting with 1 and running the times equal to num
for (i = 1; i < num; i++) {
//Set factorial to the number itself * i
factorial = factorial * i;
}
//Return factorial
return factorial;
}
console.log(factorialOf(5));
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 正在全局范围中查找JavaScript函数
- 如何将输入(type=text)从html表单传递到javascript函数
- 如何调用这个匿名 JavaScript 函数
- 通过Ajax将JavaScript函数传递给PHP文件
- 在javascript函数中设置全局变量
- 如何在执行此特定onclick事件时执行JavaScript函数
- 使用javascript函数在页面初始化后加载jquery
- javascript函数同步
- 如何将一个JavaScript函数回调为多个函数
- 在javascript函数中使用php变量
- 代码背后调用一个JavaScript函数的按钮点击-C#
- 将JavaScript函数与HTML分离
- 组合两个javascript函数
- 在 Java 中的 JavaScript 函数中插入 Wicket 值
- javascript函数内部的代码用逗号而不是分号分隔
- href属性内的javascript函数
- 使用html表单中的参数调用JavaScript函数
- 分析Javascript函数中的多个对象
- javascript函数的:和=之间的区别