Tail-call optimization

In order to better understand what tail-call optimization (TCO) is, we will need to define what it is, understand how it works and learn how to determine if a function is tail-called or not.