-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy patheia_01_recursion.exs
50 lines (39 loc) · 987 Bytes
/
eia_01_recursion.exs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# These version are not optimized with tail recursion
defmodule ListHelper do
def list_len([]) do
0
end
def list_len([_ | tail]) do
1 + list_len(tail)
end
end
ListHelper.list_len([1, 2, 3]) |> IO.inspect()
ListHelper.list_len([1]) |> IO.inspect()
ListHelper.list_len([]) |> IO.inspect()
defmodule RangeHelper do
def range(a, b) when a == b do
[a]
end
def range(a, b) when a < b do
[a | range(a + 1, b)]
end
def range(a, b) when a > b do
[a | range(a - 1, b)]
end
end
RangeHelper.range(1, 10) |> IO.inspect()
RangeHelper.range(0, -5) |> IO.inspect()
defmodule PositiveHelper do
def positive([]) do
[]
end
def positive([head | tail]) when head <= 0 do
positive(tail)
end
def positive([head | tail]) when head > 0 do
[head | positive(tail)]
end
end
PositiveHelper.positive([-1, 0, 1, 2, 3]) |> IO.inspect()
PositiveHelper.positive([1, -6, 2, -9, 3, -10]) |> IO.inspect()
PositiveHelper.positive([]) |> IO.inspect()