I don’t think there is an easy way to understand recursion. One part is that the base case (the if (n <=0) ) is what stops the loop. The calls to the function beneath that have to eventually result in (n <=0) to stop the loop.
This is similar to the stop condition in a while loop (while n <=0) or a for loop (let n = 10; n<=0; n–).
The calls beneath it need to have a mechanism to change n in such a way that the stop condition is eventually reached. In this case, the [n-1] accomplishes that, as with enough calls, each reducing n by 1, it will eventually get to 0.
Okay, now the hard part is how all that comes out to a nice, tidy, answer. That is where the hard thinking comes into play, unfortunately. For me, I will get pen and paper and make a chart that shows how each part is changed at every step of the way.That usually helps me understand what’s going on.