An example of this was hinted at in section 1.1.3: The interpreter itself evaluates expressions using a tree-recursive process.
 For example, work through in detail how the reduction rule applies to the problem of making change for 10 cents using pennies and nickels.
 One approach to coping with redundant computations is to arrange matters so that we automatically construct a table of values as they are computed. Each time we are asked to apply the procedure function to some argument, we first look to see if the value is already stored in the table, in which case we avoid performing the redundant computation. This strategy, known as tabulation or memoization, can be implemented in a straightforward way. Tabulation can sometimes be used to transform processes that require an exponential number of steps (such as count-change) (such as count_change) into processes whose space and time requirements grow linearly with the input. See exercise 3.27.
 The elements of Pascal's triangle are called the binomial coefficients, because the $n$th row consists of the coefficients of the terms in the expansion of $(x+y)^n$. This pattern for computing the coefficients appeared in Blaise Pascal's 1653 seminal work on probability theory, Traité du triangle arithmétique. According to Edwards (2019), the same pattern appears in the works of the eleventh-century Persian mathematician Al-Karaji, in the works of the twelfth-century Hindu mathematician Bhaskara, and in the works of the thirteenth-century Chinese mathematician Yang Hui.
1.2.2  Tree Recursion