When we design recursive functions, we don't think about the context of
their use. Whether they are applied for the first time or whether they are
called for the 100th time in a recursive manner doesn't matter. They are to
work according to their purpose statement, and that's all we need to know
as we design the bodies of the functions.
Altough this principle of context-independence greatly facilitates the
development of functions, it also causes occasional problems. In this
section, we illustrate the most important problem with two kinds of
examples. Both concern the loss of knowledge that occurs during a recursive
evaluation. The first subsection shows how this loss make a structurally
recursive function more complicated and less efficient than necessary; the
second one shows how the loss of knowledge causes a fatal flaw in an algorithm.