Javascript recursive functions

Good evening friends
Please do anyone has a solid of understanding of recursive functions.

I just can’t figure what is happening in the background with the recursive functions.

for example
function multiply(arr, n) {
if (n <= 0) {
return 1
} else {
return multiply (arr, n - 1) * arr[n - 1]
}
}

I understand the condition but I don’t quite understand what is happening in the rest part of the code.

Please, someone, help throw more light on this for me

Recursion is a complicated topic. Basically, you have a function that calls itself - but each time it does, it’s a new occurrence of itself, with no knowledge of anything but what it’s been fed via variables.

In this particular case, we start the first recursive call with a complete array and how many elements in that array we want to multiply together. Say our array was [2,4,5,7,9] and n=3, we only want to multiply the first three elements.

So first pass, we have the full array and an n value of 3. Arrays are zero indexed, but that three is a one-based count. So we need to find the array element at index position n-1 (3-1), or arr[2] and multiply it by the returned value of our recursive call. The parameters we pass into our function decrease n by one, moving closer to the start of the array, and that full array.

Second pass, same array, but n=2. So we’ll eventually return the value of arr[n-1] * <the recursive call>.

“Eventually” being when n=0, and we end the recursion by returning one to the next layer out, which returns 1*arr[0] to the function that called it. The calling function takes that value and multiplies it by it’s value: (1*arr[0]) * arr[1].

This continues until we reach the penis call of our recursive function.

A clearer explanation of the logic, and of how we think recursively often, can be found at https://tobycodes.tech/posts/recursion-all-the-way-down

2 Likes

Hey @OnazOnaz!

Colt Steele has some great videos on recursion and call stacks.

Hope this helps!

Happy coding!

2 Likes