Tail calls are needed in a proper language, or recursion leaks memory (lazy evaluation does the same though too if you’re not careful, sadly).