Recursion is a technique that solves a problem by solving smaller versions of the same problem. It involves functions that call themselves, known as recursive functions. Some problems like calculating factorials and combinations can be defined recursively with base cases and a general case that reduces the problem size. Recursion uses stack space to store information about each function call, implementing it similarly to regular function calls. It may be less efficient than iteration but can simplify solutions. Deciding whether to use recursion depends on factors like call depth and code simplicity versus performance.