Elixir에서 트리보나치 수열 문제를 풀어 보았습니다 (제한 시간 10 분)
9078 단어 Elixir
소개
@ Keisuke_ 간식 님의 Ruby에서 트리보나치 수열 문제를 풀어 보았습니다 (제한 시간 10 분)을 보았습니다.
Elixir 은
Elixir 1.10.3 (compiled with Erlang/OTP 23)
를 사용했습니다 하이라이트
lib/tribonacci.ex
defmodule Tribonacci do
def number(n), do: do_number(n, {1, 3, 7})
defp do_number(n, {n_3, _, _}) when n <= 0, do: n_3
defp do_number(n, {n_3, n_2, n_1}) do
do_number(n - 1, {n_2, n_1, n_3 + n_2 + n_1})
end
end
0. 설치 및 프로젝트 만들기
$ mix new tribonacci
$ cd tribonacci
1. 소스 코드 작성 (1)
lib/tribonacci.exdefmodule Tribonacci do
@doc """
Tribonacci number.
## Examples
iex> Tribonacci.number(0)
1
iex> Tribonacci.number(1)
3
iex> Tribonacci.number(2)
7
iex> Tribonacci.number(3)
11
iex> Tribonacci.number(4)
21
"""
def number(0), do: 1
def number(1), do: 3
def number(2), do: 7
def number(n), do: number(n - 3) + number(n - 2) + number(n - 1)
end
defmodule Tribonacci do
@doc """
Tribonacci number.
## Examples
iex> Tribonacci.number(0)
1
iex> Tribonacci.number(1)
3
iex> Tribonacci.number(2)
7
iex> Tribonacci.number(3)
11
iex> Tribonacci.number(4)
21
"""
def number(0), do: 1
def number(1), do: 3
def number(2), do: 7
def number(n), do: number(n - 3) + number(n - 2) + number(n - 1)
end
## Examples
의 코멘트 부분은 설치 라고 하는 것으로 테스트를 할 수 있습니다 $ mix test
mix new
그때 원래부터 만들어졌습니다.hello/0
에 test/tribonacci_test.exs
함수 테스트가 있으므로 hello/0
함수를 지우면 지워지고 걱정하지 마십시오.50번째(인덱스 49)를 구합시다.
$ iex -S mix
iex> Tribonacci.number(49)
hello/0
를 두 번 눌러 강제 종료하십시오.2. 소스 코드 작성 (2)
lib/tribonacci.exdefmodule Tribonacci do
@doc """
Tribonacci number.
## Examples
iex> Tribonacci.number(0)
1
iex> Tribonacci.number(1)
3
iex> Tribonacci.number(2)
7
iex> Tribonacci.number(3)
11
iex> Tribonacci.number(4)
21
"""
def number(n), do: do_number(n, {1, 3, 7})
defp do_number(n, {n_3, _, _}) when n <= 0, do: n_3
defp do_number(n, {n_3, n_2, n_1}) do
do_number(n - 1, {n_2, n_1, n_3 + n_2 + n_1})
end
end
defmodule Tribonacci do
@doc """
Tribonacci number.
## Examples
iex> Tribonacci.number(0)
1
iex> Tribonacci.number(1)
3
iex> Tribonacci.number(2)
7
iex> Tribonacci.number(3)
11
iex> Tribonacci.number(4)
21
"""
def number(n), do: do_number(n, {1, 3, 7})
defp do_number(n, {n_3, _, _}) when n <= 0, do: n_3
defp do_number(n, {n_3, n_2, n_1}) do
do_number(n - 1, {n_2, n_1, n_3 + n_2 + n_1})
end
end
$ mix test
Doctest 부분이 통과했을 것입니다
다시 50번째(인덱스 49)를 구합시다.
$ iex -S mix
iex> Tribonacci.number(49)
17079382868243
Ctl+C
는 IEx
로 끝내자 Wrapping Up
Reference
이 문제에 관하여(Elixir에서 트리보나치 수열 문제를 풀어 보았습니다 (제한 시간 10 분)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/torifukukaiou/items/d5a6639edf541539ac3a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)