对数字进行因式分解

Factorialize a Number

我正在参加 freecodecamp 课程,其中一项练习是创建一个 Factorialize 函数,我知道有几种方法可以做到这一点,只是不确定这个方法会一直返回什么 5

function factorialize(num) {
    var myMax = num;
    var myCounter = 1;
    var myTotal = 0;

    for (i = 0; i>= myMax; i++) {
        num = myCounter * (myCounter + 1);
        myCounter++;
    }
    return num;
}

factorialize(5);

这是您问题的递归解决方案:

function factorialize(num) {
    if(num <= 1) {
        return num
    } else {
        return num * factorialize(num-1) 
    }
}

factorialize(5)

这是迭代解:

function factorialize(num) {
    var cnt = 1;
    for (var i = 1; i <= num ; i++) {
        cnt *= i;
    }
    return cnt;
}

factorialize(5)

使用参数 5,它将 return 5!或 120。

也许你可以考虑另一种方法。

此解决方案提供了一个非常快捷的方式来展示使用递归样式和隐式类型转换可以获得的结果:

function f(n) { return +!~-n || n * f(n - 1); }
  • + 转换为数字
  • !不是
  • ~不是按位
  • - 否定

function f(n) { return +!~-n || n * f(n - 1); }

var i;
for (i = 1; i < 20; i++) {
    console.log(f(i));
}
.as-console-wrapper { max-height: 100% !important; top: 0; }

为了回答您的问题,为什么您的函数返回 5: 您的函数永远不会到达 for 循环的内部部分,因为您测试 i 是否大于 myMax 而不是小于。 所以你只是返回你的输入参数,它是五个。

但是循环不计算num的阶乘,它只是将(num+1)乘以(num+2);

这是解决这一挑战的另一种方法,我知道它既不是最短的也不是最简单的,但它仍然是一种有效的方法。

function factorialiaze(num){
var myArr = []; //declaring an array.
if(num === 0 || num === 1){
return 1;
}
if (num < 0){ //for negative numbers.
return "N/A";
}
for (var i = 1; i <= num; i++){ // creating an array.
     myArr.push(i);
}
// Reducing myArr to a single value via .reduce:
num = myArr.reduce(function(a,b){
     return a * b;
 });
return num;
}
factorialiaze(5);

试试这个功能

const factorialize = (num) =>  num === 0 ? 1 : num * factorialize(num-1)

这样使用:

factorialize(5) // returns 120

试试这个:

function factorialize(num) {
  var value = 1;
    if(num === 1 || num ===0) {
      return value;
    } else {
      for(var i = 1; i<num; i++) {
        value *= i;
      }
      return num * value;
  }
}
factorialize(5);

我的解决方案符合convention for empty product

function factorializer(int) {
    if (int <= 1) {
        return 1;
    } else {
        return int * factorializer(int - 1);
    }
}
// My solution

const factorialize = num => {
    let newNum = 1;
    for (let i = 1; i <= num; i++) {
        newNum *= i
    }
    return newNum;
}

我喜欢语法糖,所以

let factorialize = num => num <= 1 ? num : num * factorialize(num -1)
factorialize(5)