defmodule Tr do @moduledoc """ A demo of tail recursion vs no tail recursion to do the same task for 1000000000, the tr version took 3 seconds on my mac the non-tr version I gave up on. """ @doc """ Non tail recursive implementation of summing to a number Works fine as long as the number is small """ def sum_to_n(0) do 0 end def sum_to_n(n) do n+sum_to_n(n-1) end @doc """ The tail recursive version of summing. TR usually requires passing along extra parameters. Here, """ def tr_sum_to_n(n) do tr_sum_to_n(n, 0) end def tr_sum_to_n(0, sum) do sum end def tr_sum_to_n(n, sum) do tr_sum_to_n(n-1, sum+n) end end #IO.puts Tr.sum_to_n(10000000) IO.puts Tr.tr_sum_to_n(10000000)