Functions may be recursive, and may themselves define functions within themselves. Note, however, that such functions, or indeed variables, are not inherited by called functions in higher evaluation frames as they would be if they were on the search list.
The example in Figure
shows a naive way of performing
one dimensional numerical integration. The integrand is evaluated at the
end points of the range and in the middle. If the one-panel trapezium rule
answer is close enough to the two panel, then the latter is returned as the
value. Otherwise the same process is recursively applied to each panel.
The result is an adaptive integration process that concentrates function
evaluations in regions where the integrand is farthest from linear.
There is, however, a heavy overhead, and the function is only competitive
with other algorithms when the integrand is both smooth and very difficult
to evaluate.
The example is also given partly as a little puzzle in . programming.