Recursion is a technique that involves defining a function in terms of itself via self-referential calls. It allows for looping without using loop statements. A recursive function must have a base case, which provides the terminating condition to stop the infinite recursion, otherwise the function will recurse forever. To implement recursion, each recursive call pushes the function values, variables, parameters and return address onto the call stack, popping them back off after completion.