Recursion explained with pictures
Recursion is basically a simple loop but instead of using loops as *while* or *for* the function will call himself indefinitely.
The function will call himself indefinitely if you don’t put a condition to stop the recursion at a specific times.
To image, i will take a really basic example for you to understand more easily, so i will take a number 5 and i will increase his value at each time the function call himself and put a condition to stop the recursion when number is equal to 0, we will get at the end the sum (5 + 4 + 3 + 2 + 1 + 0 (1)).
At first, i give to the function sum_unit() the number 5, the function will execute and will put into the stack.
What is a stack ? is basically a space of memory were static variables are placed into, the allocation is made by the OS and it is not dynamic at all. If i initialize a variable int x = 10, it will placed right into the stack, because this is not a memory allocated. The other way to have variables into stack is to pass variables into functions (as we do), if you want to have a space of memory allocated (in the heap and not in the stack) you need to use malloc() in C. The stack works as a Last-In-First-Out (LIFO)
So now, n is equal to 5, n is not equal to 0 so we will return and call the function but we decrement n, at the next call, n will be equal to 4 as below:
So we let our function calling himself until n equal to 0
Now, n is equal to 0, so the first if of our function is valid, so now the recursion is ended, the function will not call himself more but will at first return 1 to stop the recursion.
And this is now the magic happen, the function will roll but in the other way, 0 to 5 (check green arrow in the stack).
At return 1, n is equal to 0, but because we return 1, it will count a this moment, so 1 + sum_unit(0) = 1.
Return n + sum_unit(n-1) is called to roll, so n = 1 and sum_unit(1) = 1.
1 + 1 =2.
At the next Return n + sum_unit(n-1), n is equal now to 2 because the addition before was equal to 2 and it will addition with the value of sum_unit(2) so 2, 2 + 2 = 4.
etc… until the end of the roll is achieved, so sum_unit(5). The function sum_unit will return at the end where you called the function, 16.
So as you can see now, the n + of (return n + sum_unit(n-1)) is not yet executed while the recursion, it execute only when the recursion is done and the roll start.
I hope you understand more about this magic concept.