Recursion is a method where the solution to a problem depends on solutions to smaller instances of the same problem. In programming, it involves a function calling itself as a subroutine to solve these smaller instances, until reaching a base case which stops the recursion.