Fixme work in progress
If we generate a very large collection we run the risk of blowing our heap space. For example we could use range to generate a very large collection, say a vector containing 10 billion values
Don't try this example below
Using tail call optimisation (tail recursion) allows us to reuse a memory location when we call a function recursively. This tail recursion is not part of the underlying Java Virtual Machine (JVM), so instead Clojure has a specific function called
recur function allows the processing of a very large data set without blowing the heap space because the memory space will be reused.
recur function must be the last expression in order to work.