/** 7! = 7 × 6 × 5 × 4 × 3 × 2 × 1 = 5040 ------------------ 7! = 7 x 6! = 5040 6! = 6 x 5! = 720 5! = 5 x 4! = 120 4! = 4 x 3! = 24 3! = 3 x 2! = 6 2! = 2 x 1! = 2 1! = 1 x 1 = 1 0! = 1 **/ // Iteration function factorialIter(num){ var result = 1; for (var i = 1; i <= num; i++) { result = result * i; } return result; } // Accumulator - computes during stack push function factorialAccumRecur(num, total = 1) { if (num === 0) { return total; } return factorialAccumRecur(num - 1, total * num); } // Tail Recursion - computes during stack pop function factorialTailRecur(num) { if(num === 0) { return 1 } else { return num * factorialTailRecur(num - 1); } } console.log('factorialIter:', factorialIter(100)); console.log('factorialAccumRecur:', factorialAccumRecur(100)); console.log('factorialTailRecur:', factorialTailRecur(100));