defmodule Collatz do
  def collatz(n) do
    do_collatz(n, [])
    |> Enum.reverse
    |> Enum.join("->")
  end
  
  defp do_collatz(n, result_list) when n == 1, do: [1] ++ result_list
  defp do_collatz(n, result_list) when rem(n, 2) == 0 do
    do_collatz(trunc(n/2), [n] ++ result_list)
  end
  
  defp do_collatz(n, result_list) do
    do_collatz(3*n+1, [n] ++ result_list)
  end
end

Изменить пасту