Tail recursion just means that the last thing that a function does is to call itself. It is a special case of a tail call, which is any function called as the last thing a function does. In some programming languages, usually functional ones like Scheme and Erlang, a tail call will be optimised so that it does not take up any extra space and therefore you can have an infinite tail recursion without having your program crash.