Recursion in Javascript
Table of Content:
Introduction to the JavaScript recursive function
A recursive function is a function that calls itself. We will take the classic factorial function for the demonstration.
in Mathematics, the factorial of a non-negative integer is the product of all positive integer less than or equal to it. The factorial of the integer n is denoted by n!
For example, the factorial of 5
is calculated as follows:
5! = 5 x 4 x 3 x 2 x 1 = 120
To develop a factorial function in JavaScript, you simply use a for loop as follows:
function factorial(n) { var result = 1; for (let i = n; i > 1; i--) { result *= i; } return result; }
This function is clean and straightforward.
However, it is more readable if you develop the factorial function using the recursion technique. See the following recursive factorial function:
function factorial(n) { if (n <= 1) { return 1; } else { return n * factorial(n - 1); } }
This is how it works. If n
is equal to one or zero, the factorial of n
is 1
; otherwise, the factorial of n
is the product of n
and factorial of n - 1
.
The function seems to work fine initially. However, as mentioned in the Function type tutorial, the name of a function is a pointer pointing to the function object.
The following code causes an error.
var fac = factorial; factorial = null; console.log(fac(5)); // TypeError: factorial is not a function
How the script works.
- First, assign the variable named
fac
to thefactorial
function name. - Second, set the
factorial
pointer to null. - Third, call the
fac
function.
Because inside the function, we referenced to the factorial
name which was set to null at the time of calling the function, therefore we got a TypeError
error.
To resolve it, you can use a named function expression as follows:
var factorial = function pf(n) { if (n <= 1) { return 1; } else { return n * pf(n - 1); } };
In this case, the pf
function name is visible inside the function itself and it remains the same even if you assign the function to another variable. As a result, the recursive call will work correctly.
Here is the test of the factorial
function:
var fac = factorial; factorial = null; console.log(fac(5)); // 120
In this tutorial, we have shown you how to develop JavaScript recursive functions by implementing the factorial calculation function.