Did you read the &quot;But Seriously&quot; section of that page? It explains that how the different examples actually highlight some advanced functional programming techniques.<p>In practice, there are some of the examples that are more important than the others:<p>- The &quot;accumulating&quot; version might use less stack-space than the naive recursion so its a very important technique to learn.<p>- The foldl version is a more structured version of the accumulating version, kind of like how a for loop if is more structured than a goto.<p>- The memoizing (aka caching) version is useful if your funcion is very expensive to compute.<p>- And the &quot;tenured professor&quot; obviously makes the best use of the existing syntactic suger :)<p>The rest of the entries are a bit more overkill for a factorial program.