Some guidelines for designing recursive functions:

- Write a clear definition of what your function should do.
Write this definition as a comment above the function code.
- Identify one or more
*base cases*: simple inputs for which the answer is obvious and can be determined immediately. - Identify the
*recursive case*: an input other than the base case. How can the answer be expressed in terms of the present input and the answer provided by this function (assuming it works as desired) for a smaller input?There are two common ways of making the input smaller:

- Remove a small part of the input, e.g. remove the first element
from a linked list.
- Cut the input in half, e.g. follow one branch of a tree.

- Remove a small part of the input, e.g. remove the first element
from a linked list.