A broad class of competitive programming problems involves generating something, i.e., subsets, or permutations of an existing set. Unlike many problems, the fundamental problem is a complete search problem, i.e., we have to exhaustively clear the search space (as opposed to local search).
Subsets
One good way to generate subsets is with the use of recursion.