The reason that tail recursion is "important" is that functional programming style generally avoids using iterators (or more generally it avoids changing any variable after it's initialized). So instead of a "loop", one would use recursion. So most "functional" programming languages require any implementation of that language to properly handle tail-recursion. With this "optimization" one can freely implement an algorithm in the "functional" style w/o concerns of it bombing out when the input is too large. I found that ~1300 is the maximum depth of the stack on my machine.... So I can't use recursion to iterate over more than ~1300 items.