VADO
VADO

Reputation: 33

Factorialize a Number

I'm taking the freecodecamp course one of the exercises it's to create a Factorialize function, I know there is several ways to do it just not sure what this one keeps returning 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);

Upvotes: 1

Views: 12202

Answers (9)

timashoff
timashoff

Reputation: 1

I love syntactic sugar, so

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

Upvotes: 0

Atudosiea Catalin
Atudosiea Catalin

Reputation: 9

// My solution

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

Upvotes: 0

Koleen BP
Koleen BP

Reputation: 91

My solution in compliance with convention for empty product

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

Upvotes: 1

Marina ES
Marina ES

Reputation: 270

Try this :

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

Upvotes: 0

Imran Khan
Imran Khan

Reputation: 29

Try this function

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

Use it like this:

factorialize(5) // returns 120

Upvotes: 0

Nina Scholz
Nina Scholz

Reputation: 386680

Maybe you consider another approach.

This solution features a very short - cut to show what is possible to get with an recursive style and a implicit type conversion:

function f(n) { return +!~-n || n * f(n - 1); }
  • + convert to number
  • ! not
  • ~ not bitwise
  • - negative

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

Upvotes: 0

Ahmad Saleh
Ahmad Saleh

Reputation: 11

Here is another way to solve this challenge and I know it is neither the shortest nor the easiest but it is still a valid way.

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

Upvotes: 0

Hans Mikesen
Hans Mikesen

Reputation: 11

To answer your question, why your function is returning 5: Your function never reaches the inner part of the for-loop because your testing if i is greater than myMax instead of less than. So you are just returning your input parameter which is five.

But the loop does not calculate the factorial of num, it only multiplies (num+1) with (num+2);

Upvotes: 1

Andro
Andro

Reputation: 2232

This is a recursive solution of your problem:

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

factorialize(5)

This is the iterative solution:

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

factorialize(5)

with argument 5, it will return the 5! or 120.

Upvotes: 6

Related Questions