WinchenzoMagnifico
WinchenzoMagnifico

Reputation: 3425

What makes this simple recursion not work?

the First one doesn't work, its just trying to find a factorial, it returns NaN, so why is it if you use else if it doesnt work?

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


console.log(FirstFactorial(3)) === NaN



function factorial(n) {
  if(n == 0) {
    return 1
  } 
  else {
    return n * factorial(n - 1);
  }
}

console.log(factorial(3)) == 6

Upvotes: 0

Views: 49

Answers (1)

Paul S.
Paul S.

Reputation: 66334

You're missing a case for num === 1, so when you do

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

FirstFactorial(3);

You're doing

3 * FirstFactorial(2);
3 * 2 * FirstFactorial(1);
3 * 2 * undefined; // NaN

Re-arrange the function logic thus

function FirstFactorial(num) {
    if (num > 1) {
        return num * FirstFactorial(num - 1);
    }
    return 1;
}

Upvotes: 1

Related Questions