Tail recursion by using function generalization

The design of tail recursive algorithms may require thinking about iteration rather than recursion. This paper provides a methodology for deriving tail recursive functions that is based on declarative programming and the concept of function generalization, which allow to avoid iterative thinking.