## DEV Community

Ticha Godwill Nji

Posted on

# Javascript factorial

Hey everyone!

I've stumbled upon this interesting JavaScript code that calculates the factorial of a number, and I'd love to hear your thoughts on it!

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

// Test the factorial function
const num = 5;
console.log(`Factorial of \${num} is: \${factorial(num)}`);

``````

## Discussion Points:

• Logic in the Code: Can you explain how the factorial function works, especially the recursive part?

• Test Case: The code tests the factorial function with the number 5. How would you test it with different numbers?

• Recursion: What are your thoughts on using recursion to solve this problem? Are there alternative approaches you would consider?

• Improvements: Are there any improvements or optimizations you would suggest for this code?

Explore more on my Youtube channel

Let's dive in and explore together! ππ

SaKKo
``````const factorialMemo = {}
function factorial(n) {
if (n === 0 || n === 1) {
return 1;
}
if (!factorialMemo[n]) {
factorialMemo[n] = n * factorial(n - 1)
}
return factorialMemo[n];
}
``````

For me, I would prefer to memoize the result. I'm not too worried about coding styles. As long as it is easy to read and it's correctly computed.

Ticha Godwill Nji

There are many coding styles and it is worth noting that one size doesn't fit all. So, it is totally ok to have your own coding style as long as the code follows the code practices and industry standards.

SaKKo

My point is just to improve performance.

Eckehard • Edited

You can use a simple loop, but recursion can be shorter:

``````   // Loop
function fac1(n) {
let k = 1
for (let i = 1; i <= n; i++)
k = k * i
return k
}

``````

With respect to your code: Why not check for (n <= 1) ? And this is a perfect case for the ternary operator, so your code could look like this:

``````    function factorial(n) {
return (n <= 1) ?  1 : n * factorial(n - 1);
}
``````

Ticha Godwill Nji

Smart thinking.

Eckehard

Thank you much!

Talking about improvements: else after return is superfluous. So, your unchanged code should look like this:

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

And your code is a bit dangerouse: see what happens, if you try `factorial(-1)`. Checking for <=1 covers this too....

Ticha Godwill Nji

Thank you for pointing this out to me. It should cover negative numbers

Jon Randy ποΈ • Edited

π

``````// Loop
const fac = (n, k=1) => {for (;n--;k*=n+1){} return k}
``````

Amin