I will try to explain, but sometimes recursion takes *doing* to understand (some people just need to write more code to get it).

This is the function code with some line numbers I added:

```
01: function multiply(arr, n) {
02: if (n <= 0) {
03: return 1;
04: } else {
05: return multiply(arr, n - 1) * arr[n - 1];
06: }
07: }
```

Now we can run through this code with some inputs to see what is happening:

arr possibly has 3 numbers, let’s say 5, 6, 7

n is 3 because I want to start my multiplication at the last number (so mulitply from 7)

line 1 multiply was called. multiply gets the array 5, 6, 7 and 3

line 2, is 3 less than or equal to 0? no

…

line 5, call my friend to help me multiply. His name is also multiply. Give him 5,6,7. & Tell him that n is 2.

Now wait for my friend to help me…

line 1 this is multiply’s friend who was called by multiply. This multiply gets the array 5,6,7 and 2

line 2, is 2 <= 0, nope

…

line 5, call my other friend to help me multiply. His name is also multiply. Give him 5,6,7 and tell him that n is 1.

Now wait for my other friend to help me…

line 1, this is the other friend of the friend of multiply. This multiply gets the array 5,6,7 and 1

line 2, is 1 <= 0, nope

…

line 5, call my other other friend to help me multiply. His name is also multiply. Give him 5, 6, 7 and tell him that n is 0.

Now wait for my other other friend to help me

line 1, this is the other other friend of the other friend of the friend of multiply. This multiply gets the array 5, 6, 7 and 0

line 2, is 0 <= 0, YES!

line 3, return 1 to my other friend

other friend gets back the 1 then continues with

line 5, multiply 1 with 5 (arr[n-1], recall that the ‘other friend’ got n=1) and

return 5 (result of 1 * 5) to my friend

my friend get back the 5 then continues with

line 5, multiply 5 with 6 (arr[n-1], recall that the friend got n=2) and

return 30

I get back 30, finally, now I can continue with my own

line 5, multiply 30 with 7 (arr[n-1], recall that my n was 3) and

return 210

done.

The reason all this worked is because we were taking a problem and breaking it up into incrementally smaller pieces.

Essentially multiply does only one multiplication at a time, but repeating it over a smaller and smaller set of numbers till finally there is only 2 numbers to multiply and return.