Tail-Call Optimization
Learn to create recursive functions that have constant and low memory consumption.
We'll cover the following
Introduction
Every time we call a function, it consumes memory. Usually, we don’t need to worry much about it, machines today have plenty of memory, and the Erlang VM does a great job keeping computation costs low for a decent amount of data. But when some input makes our function do millions of recursive calls – that consumes significant memory. In this section, we’ll discuss a way of creating recursive functions that have constant and low memory consumption. We’ll take advantage of compiler tail-call optimization.
Tail-call optimization is when the compiler reduces functions in memory without allocating more memory. It’s a common compiler feature in functional programming languages. To use it, we need to ensure that the last expression of our function is a function call. If the last expression is a new function call, then the current function’s return is the return of the new function call, and it doesn’t need to keep the current function in memory. Consider this example:
iex> scream = fn word -> String.upcase("#{word}!!!") end
iex> scream.("help")
#Output -> "HELP!!!!"
Try it below:
Get hands-on with 1400+ tech skills courses.