So far every function made one recursive call, and the calls formed a straight chain. When a function calls itself two or more times, the calls branch out like a tree. That one change lets a few lines of code solve problems a loop finds hard.
Two calls: the Fibonacci tree
The Fibonacci numbers start 0, 1, and every next one is the sum of the two before it: 0, 1, 1, 2, 3, 5, 8, 13… As a function, that is two calls:
Step through fib(4) and watch the stack go down one branch, come back, and go
down the next: