멋진 피보나치 수열 (Elixir)
6938 단어 Elixir
소개
Elixir은 1.10.4-otp-23을 사용합니다
피보나치 수열
f(0) = 0 \\
f(1) = 1 \\
f(n) = f(n -1) + f(n - 2)
프로그램
lib/fibonacci.exdefmodule Fibonacci do
def sequence, do: Stream.unfold({0, 1}, fn {a, b} -> {a, {b, a + b}} end)
def at(n), do: sequence() |> Enum.take(n + 1) |> Enum.at(-1)
end
defmodule PureFibonacci do
def at(0), do: 0
def at(1), do: 1
def at(n), do: at(n - 1) + at(n - 2)
end
f(0) = 0 \\
f(1) = 1 \\
f(n) = f(n -1) + f(n - 2)
lib/fibonacci.ex
defmodule Fibonacci do
def sequence, do: Stream.unfold({0, 1}, fn {a, b} -> {a, {b, a + b}} end)
def at(n), do: sequence() |> Enum.take(n + 1) |> Enum.at(-1)
end
defmodule PureFibonacci do
def at(0), do: 0
def at(1), do: 1
def at(n), do: at(n - 1) + at(n - 2)
end
PureFibonacci
모듈은 소박한 피보나치 수열 계산을 작성한 예입니다 측정
$ iex -S mix
iex> :timer.tc(Fibonacci, :at, [40])
{19, 102334155}
iex> :timer.tc(PureFibonacci, :at, [40])
{6503506, 102334155}
$ iex -S mix
iex> :timer.tc(Fibonacci, :at, [40])
{19, 102334155}
iex> :timer.tc(PureFibonacci, :at, [40])
{6503506, 102334155}
: 치메 r. tc/3은 인수에 (모듈, 메소드 이름의 아톰, 인수)를 지정하여 호출하면 결과를
{時間, 値}
의 형태로 얻을 수 있습니다.PureFibonacci.at(40)
는 약 6.5초 걸리는 반면, Fibonacci.at(40)
는 19μ초 로 계산이 끝난 것입니다PureFibonacci
쪽이 수식 그대로 쓰고 있는 내용은 알기 쉽습니다만, 시간은 걸리는 결과가 되었습니다 Wrapping Up
Stream.unfold/2 (이것은 이것에 국한되지 않습니다.)
Reference
이 문제에 관하여(멋진 피보나치 수열 (Elixir)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/torifukukaiou/items/33c3fd744bd1a4618cb3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)