Ian Bicking: the old part of his blog

It's not that hard to make tail calls

Personally, I understood how to make proper tail calls long before I understood the underlying mechanism, or at least before I understood it well. In Scheme/Lisp, all you have to know is that to make things efficient, you should put your recursive call not surrounded by any other function. In Python, it's just as simple: make the thing after return be a recursive function call, and don't use anything to operate on the result of that recursive call.
Comment on The challenge of metaprogramming comment 000
by Daniel Ehrenberg