Round 8: Recursion¶
(Curry’s Y combinator.)
In this round you will learn ...
- ... that recursion is one of the basic programming principles to organize computations and data
- ... that the power of recursion stems from controlled self-reference that terminates at base cases
- in essence, we can implement a large computation (or data structure) using smaller, self-similar, parts until the computation is so small so as to become trivial
- ... that many familiar mathematical objects and functions benefit from a recursive definition
- for example, a string of length \(n\) either (i) is empty (when \(n=0\), the base case), or (ii) consists of a first character followed by a string of length \(n-1\) (when \(n\geq 1\), the recursive case)
- recursive definitions lead to simple recursive functions that manipulate data or carry out a computation
- recursive definitions admit mathematical analysis via mathematical induction (*)
- ... that recursion is naturally associated with a recursion tree that records all the stages of recursion
- ... that recursion is a natural tool to carry out exhaustive search
- ... how to use tail recursion to obtain efficiency
(Material that is marked with one or more asterisks (*) is good-to-know, but not critical to solving the exercises or passing the course.)
Recursion, recalled and extended¶
The goals of this round are
- to recall the idea of recursion,
- introduce ourselves to recursively defined data structures, and
- learn how to solve problems recursively.
Athough we’ll review the basic idea of the recursion, you may want to first recall the material on recursion in the “Programming 1” course.