Recusion works by creating a method which is defined in terms of itself. This effectively means that the method will make method calls to itself. It makes these calls using increasingly reduced problem sizes as arguments, until a base case is reached. These method calls are stored in a stack, and when the base case is reached, the stack is evaluated, as they are, in a last-in-first-out order, leading to a final result.