A set of program units which call each other. For example, function A calls function B, which then recursively calls A again, and so on (until, hopefully, a base case is reached). This technique is called mutual recursion.