Recursion is a programming technique where a function calls itself repeatedly, either directly or indirectly, until a base case is reached. It involves defining a function that references itself by invoking a copy of its own definition. Recursion allows programmers to write algorithms that involve repeating a process multiple times in a concise and elegant way.