一个数字的因子化

时间:2015-08-21 19:09:33

标签: javascript math factorial

我参加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);

8 个答案:

答案 0 :(得分: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,它将返回5!或120.

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

也许你会考虑另一种方法。

此解决方案具有非常简短的功能,可显示递归样式和隐式类型转换的可能性:

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

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

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

答案 3 :(得分:0)

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

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);

答案 4 :(得分:0)

尝试此功能

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

像这样使用:

factorialize(5) // returns 120

答案 5 :(得分:0)

试试这个:

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);

答案 6 :(得分:0)

// My solution

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

答案 7 :(得分:0)

我喜欢语法糖,所以

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