Recursion solves a problem by calling the same procedure on a smaller or simpler case. A base case is a case whose answer can be returned directly, without another recursive call.
Having a base case written somewhere is not enough. Each recursive step must move the relevant input towards it. If the input never reaches the stopping condition, the process can keep calling itself until it fails. Tracing a small example by hand often reveals that mistake quickly.