Massachusetts Institute of Technology: John Guttag's "Recursion Lecture Notes"
These notes expand on the topic of recursion as a way to decompose problems into subproblems. They also apply to decomposing data structures into sub-substructures. Identifying the recursive problem or data structure and their implementation in a program require a thorough understanding of the programming process. Some implementation topics are pointed out, including reentrant code, recursion vs. iteration (loops), relation of recursion to the functional and imperative programming paradigms, and common mistakes in programming recursion.
Click http://web.mit.edu/6.005/www/fa15/classes/10-recursion/ link to open resource.