1. all arguments to recursive function applications are
- unchanged, or
- one step closer to a base case in the data definition, or
- a partial answer (passed in an accumulator)
2. The value in the accumulator are use in one or more base cases
3. The accumulatively recursive function usually has a wrapper function that sets the initial value of the accumulator