A recursive function must have at least one to prevent it from calling itself indefinitely.

Each time a recursive function calls itself, it is creating a new of that function on the call stack.

The process of breaking a problem down into smaller subproblems that resemble the original problem is known as .