Skip to content

Commit

Permalink
feat: Add the fibonacci package.
Browse files Browse the repository at this point in the history
  • Loading branch information
goloroden committed Dec 8, 2024
1 parent 06074c8 commit 9785655
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 0 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ So far, the following exercises have been covered:
- [Cons, Car, Cdr & co.](./cons) – implements a cons cell and the corresponding functions
- [Continous maximum](./continuousmax/) – calculates the maximum of a sliding window
- [Egyptian fractions](./egyptianfractions/) – calculates the "Egyptian Fractions" version of a given fraction
- [Fibonacci](./fibonacci/) – calculates the n-th Fibonacci number
- [Floyd](./floyd/) – implements Floyd's cycle-finding "Tortoise and Hare" algorithm
- [Heap](./heap/) – implements a heap from scratch, without using the built-in `container/heap` package
- [Markov count](./markovcount/) – figures out how often states are reached by a Markov chain
Expand Down
2 changes: 2 additions & 0 deletions fibonacci/documentation.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
// Package fibonacci calculates the n-th Fibonacci number.
package fibonacci
8 changes: 8 additions & 0 deletions fibonacci/fibonacci.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package fibonacci

import "math"

func Fib(n int) int {
phi := (1 + math.Sqrt(5)) / 2
return int(math.Round(math.Pow(phi, float64(n)) / math.Sqrt(5)))
}
23 changes: 23 additions & 0 deletions fibonacci/fibonacci_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package fibonacci_test

import (
"testing"

"github.com/stretchr/testify/assert"
"github.com/thenativeweb/codingcircle/fibonacci"
)

func TestFib(t *testing.T) {
assert.Equal(t, 1, fibonacci.Fib(1))
assert.Equal(t, 1, fibonacci.Fib(2))
assert.Equal(t, 2, fibonacci.Fib(3))
assert.Equal(t, 3, fibonacci.Fib(4))
assert.Equal(t, 5, fibonacci.Fib(5))
assert.Equal(t, 8, fibonacci.Fib(6))
assert.Equal(t, 13, fibonacci.Fib(7))
assert.Equal(t, 21, fibonacci.Fib(8))
assert.Equal(t, 34, fibonacci.Fib(9))
assert.Equal(t, 55, fibonacci.Fib(10))

assert.Equal(t, 1134903170, fibonacci.Fib(45))
}

0 comments on commit 9785655

Please sign in to comment.