Recursion in C is the process where a function calls itself to solve complex problems by breaking them into simpler sub-problems. A recursive function includes a base condition to terminate the recursion and a recursive case that defines how the problem is divided. Different types of recursion in C include direct, head, tail, tree, and indirect recursion.