DEV Community

Discussion on: Daily Challenge #24 - Shortest Step

Collapse
 
brightone profile image
Oleksii Filonenko • Edited

Elixir:

defmodule ShortestStep do
  import Integer

  @spec steps(non_neg_integer) :: non_neg_integer
  def steps(start) when start > 0, do: do_steps(start)

  @spec do_steps(non_neg_integer) :: non_neg_integer
  defp do_steps(1), do: 0
  defp do_steps(current) when is_odd(current), do: do_steps(current - 1) + 1
  defp do_steps(current), do: do_steps(div(current, 2)) + 1
end

Recursive thinking is fun :)