Skip to content

Instantly share code, notes, and snippets.

@danabrams
Created November 15, 2018 00:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save danabrams/7a2beeeeadb6d67029ca642a8e5180f8 to your computer and use it in GitHub Desktop.
Save danabrams/7a2beeeeadb6d67029ca642a8e5180f8 to your computer and use it in GitHub Desktop.
Recursive and Tail Recursive Fibonacci in Elixir
defmodule Sicp.Fibonacci do
def fibonacci(0) do
0
end
def fibonacci(1) do
1
end
def fibonacci(n) do
fibonacci(n - 1) + fibonacci(n - 2)
end
defp fibonacci_tail(_prev, acc, 1) do
acc
end
defp fibonacci_tail(prev_acc, acc, count) do
fibonacci_tail(acc, prev_acc + acc, count - 1)
end
def fib_tail(0) do
0
end
def fib_tail(1) do
1
end
def fib_tail(2) do
1
end
def fib_tail(n) do
fibonacci_tail(1, 1, n - 1)
end
def fib_list(n) do
for n <- 0..n, do: fibonacci(n)
end
def fib_list_tail(n) do
for n <- 0..n, do: fib_tail(n)
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment