Current section
Files
Jump to
Current section
Files
lib/util.ex
defmodule Abacus.Util do
@moduledoc """
Utility functions
"""
@doc """
Returns the factorial of n.
## Example
```
iex(2)> factorial(0)
1
iex(3)> factorial(1)
1
iex(4)> factorial(2)
2
iex(5)> factorial(3)
6
iex(6)> factorial(4)
24
iex(7)> factorial(5)
120
```
"""
@spec factorial(number) :: number
def factorial(0), do: 1
def factorial(n) when n > 0 do
_factorial(1, n, 1)
end
def _factorial(n, m, r) when n < m do
_factorial(n + 1, m, r * (n + 1))
end
def _factorial(n, n, r), do: r
end