Goal
Elixirの再帰処理を習得する。
Dev-Environment
OS: Windows8.1
Erlang: Eshell V6.4, OTP-Version 17.5
Elixir: v1.0.5
Erlang: Eshell V6.4, OTP-Version 17.5
Elixir: v1.0.5
Wait a minute
再帰処理について学びます。
と言いつつも、例を示すだけです。
と言いつつも、例を示すだけです。
Index
|> Recursion Example
|> Tail recursion Example
|> Tail recursion Example
Recursion Example
逐次処理していく再帰の例です。
Example:
プラスの数値を逐次表示していくだけのループ(再帰)の例。
defmodule RecursionSample do
def num_recursion(loop_count) when loop_count > 0 do
IO.puts loop_count
num_recursion(loop_count - 1)
end
def num_recursion(0) do
IO.puts 0
end
end
Example:
階乗を計算するよくある例。
defmodule RecursionSample do
def fact(n) when n > 1 do
n * fact(n - 1)
end
def fact(1) do
1
end
end
Tail recursion Example
末尾再帰の例です。
Example:
階乗を末尾再帰で実装してみた例。
defmodule RecursionSample do
def tail_fact(n) when n > 1 do
tail_fact(n, n)
end
defp tail_fact(n, memory) when n > 1 do
tail_fact(n - 1, memory * (n - 1))
end
defp tail_fact(1, memory) do
memory
end
end
あんまり末尾再帰の例としては良くないですね…
Speaking to oneself
Enumがあるおかげで、ほぼほぼ再帰を使う機会はないと思う。
まぁ、概念だけ知っていればいいのではないでしょうか?
まぁ、概念だけ知っていればいいのではないでしょうか?
そも、Web開発やっている時に、再帰処理出てきたら何か間違ってる気がする。