分解函数javascript

分解函数javascript,javascript,factorial,Javascript,Factorial,我在编写一个分解数字的函数时遇到了一个小问题。困难的部分已经完成了。但是,当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 e

我在编写一个分解数字的函数时遇到了一个小问题。困难的部分已经完成了。但是,当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);
}
var arrOfNum=[];
函数因子化(num){
对于(i=1;i综述:

  • 缺少局部变量
    i
    的声明

    var i;
    
  • 其他使用的变量的声明在函数上分布。更好的方法是在函数顶部声明变量

  • 此任务需要一个
    initialValue
    作为第二个参数

    第一次调用回调时,
    previousValue
    currentValue
    可以是两个值中的一个。如果在reduce调用中提供了
    initialValue
    ,则
    previousValue
    将等于
    initialValue
    并且
    currentValue
    将等于数组中的第一个值。如果否initialValue
,则
previousValue
将等于数组中的第一个值,
currentValue
将等于第二个值

函数阶乘(num){
var i,
arrOfNum=[],
结果;
对于(i=1;i综述:

  • 缺少局部变量
    i
    的声明

    var i;
    
  • 其他使用的变量的声明在函数上分布。更好的方法是在函数顶部声明变量

  • 此任务需要一个
    initialValue
    作为第二个参数

    第一次调用回调时,
    previousValue
    currentValue
    可以是两个值中的一个。如果在reduce调用中提供了
    initialValue
    ,则
    previousValue
    将等于
    initialValue
    并且
    currentValue
    将等于数组中的第一个值。如果否initialValue
,则
previousValue
将等于数组中的第一个值,
currentValue
将等于第二个值

函数阶乘(num){
var i,
arrOfNum=[],
结果;

对于(i=1;i只需返回值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);
     }
函数因式分解(num){
如果(num<1)返回1;//则添加此行

对于(i=1;i只需返回值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);
     }
函数因式分解(num){
如果(num<1)返回1;//则添加此行

对于(i=1;i如果给
reduce
一个
1
的初始值,即使没有明确的检查,一切都会正常工作:

var result = arrOfNum.reduce(function(a,b){
   return a * b;
 }, 1);
  ^^^         // PROVIDE EXPLICIT INITIAL VALUE TO REDUCE

如果给
reduce
一个初始值
1
,即使没有明确的检查,一切都会正常工作:

var result = arrOfNum.reduce(function(a,b){
   return a * b;
 }, 1);
  ^^^         // PROVIDE EXPLICIT INITIAL VALUE TO REDUCE


您已经有了一个
for
循环,在这个循环中,您可以一次计算阶乘,而无需使用数组和reduce

function factorial(num) {
  var result = 1;
  for(i = 2; i <= num; i++) {
      result *= i;
  }
  return result;
}
函数阶乘(num){
var结果=1;

对于(i=2;i您已经有了一个
for
循环,在这个循环中,您可以一次计算阶乘,而无需使用数组和reduce

function factorial(num) {
  var result = 1;
  for(i = 2; i <= num; i++) {
      result *= i;
  }
  return result;
}
函数阶乘(num){
var结果=1;

对于(i=2;i,这里有一个相当精简的函数,它返回一个包含“n”的所有因子的数组

您只需查看 对于那些不知道得到sqrt(n)时的| 0;位的人来说,这是一个更快的数学等价物

由于factn是在一些健全性检查之后定义的,因此函数将返回undefined或一个数组,该数组很容易使用if(factors=factorize(n){success code}sorta结构进行检查

可以对此进行一些改进,但它们很复杂,并且超出了我编写它时的要求-具体来说,我使用它来计算大型图像的CSS精灵大小,方法是对图像的x+y维度使用factorize,然后创建第三个共享因子数组(这将为您提供所有可能的方形精灵大小的列表)

函数分解(n){
n=数量(n);
如果(n){
如果(n>1){
var sqrtn=Math.sqrt(n)| 0;
var-factn=[1,n];
var-ipos=0;

对于(i=2;i,这里有一个相当精简的函数,它返回一个包含“n”的所有因子的数组

您只需查看 对于那些不知道得到sqrt(n)时的| 0;位的人来说,这是一个更快的数学等价物

由于factn是在一些健全性检查之后定义的,因此函数将返回undefined或一个数组,该数组很容易使用if(factors=factorize(n){success code}sorta结构进行检查

可以对此进行一些改进,但它们很复杂,并且超出了我编写它时的要求-具体来说,我使用它来计算大型图像的CSS精灵大小,方法是对图像的x+y维度使用factorize,然后创建第三个共享因子数组(这将为您提供所有可能的方形精灵大小的列表)

函数分解(n){
n=数量(n);
如果(n){
如果(n>1){
var sqrtn=Math.sqrt(n)| 0;
var-factn=[1,n];
var-ipos=0;

对于(i=2;i,可以使用以下使用递归的方法:

function factorize(num){
    if(num === 0){
        return 1 ;
    }
    else {
        return num = num * factorize(num-1);
    }
}

可以使用以下使用递归的方法:

function factorize(num){
    if(num === 0){
        return 1 ;
    }
    else {
        return num = num * factorize(num-1);
    }
}

不知道为什么会有复杂的答案。一个非常简单的答案是:

vari;
函数factorialOf(num){
//最初将阶乘设置为数字
var阶乘=num;
//从1开始,运行时间等于num的for循环
对于(i=1;iconsole.log(factorialOf(5));
不知道为什么会有复杂的答案。一个非常简单的答案是: