Oh man thanks! this makes it so easy! ^^

[quote=“ibex10”]To visualise what’s happening, try the following exercise for: singSongFor (4).

Take a blank sheet of paper, and cut it into four equal pieces.

Start building a call stack:

```
numberOfBottles == 4
1. Take a blank piece and write the number 4 on it, and put it aside.
--> singSongFor (3)
numberOfBottles == 3
2. Take another blank piece and write the number 3 on it, and place it on top of number 4.
--> singSongFor (2)
numberOfBottles == 2
3. Take another blank piece and write the number 2 on it, and place it on top of number 3.
--> singSongFor (1)
numberOfBottles == 1
4. Take another blank piece and write the number 1 on it, and place it on top of number 2.
--> singSongFor (0)
numberOfBottles == 0
```

You have no more blank pieces left.

And you have a stack of 4 pieces numbered 1, 2, 3, and 4 - 1 at the top and 4 at the bottom.

This is akin to function calling itself four times.

Now start emptying the stack, by removing the pieces of paper one at a time:

```
numberOfBottles == 0
1. Remove the top piece (number 1) from the stack, you see the number 2.
--> return
numberOfBottles == 1
2. Remove the top piece (number 2) from the stack, you see the number 3.
--> return
numberOfBottles == 2
3. Remove the top piece (number 3) from the stack, you see the number 4.
--> return
numberOfBottles == 3
4. Remove the top piece (number 4) from the stack, the stack is empty now.
--> return
numberOfBottles == 4
```

This is akin to function returning four times.[/quote]