スポンサーリンク

2015年9月5日

[Elixir]再帰処理を習得する

とある錬金術師の万能薬(Elixir)

Goal

Elixirの再帰処理を習得する。

Dev-Environment

OS: Windows8.1
Erlang: Eshell V6.4, OTP-Version 17.5
Elixir: v1.0.5

Wait a minute

再帰処理について学びます。
と言いつつも、例を示すだけです。

Index

|> 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開発やっている時に、再帰処理出てきたら何か間違ってる気がする。

Bibliography

人気の投稿