We often want the top-level function to be called only with a set of user parameters.

` (fn `*parameters*` )`

The recursive function that actually does the work may have extra parameters that include:

- the original parameters
- an
*answer*or partial answer that is being developed. - the
*state*of the computation, such as a count of the number of remaining steps

` (fnb `*parameters answer state*` )`

The auxiliary function ` fnb` will call itself with:

- the
*parameters*, either as originally specified, or a smaller version - an updated partial
*answer*. - an updated
*state*, such as a count`- 1`