End-to-end arguments in System Design [1] convinced me that a lot of special case handling I thought was necessary was really optimization and optional.
Though I already understood recursion pretty well when I read this, the explanation Paul Graham gives in section 2.7 of ANSI Common Lisp was pretty useful [2].