What is Fibonacci?
See more here
What is Fibonacci formula?
Fibonacci sequence, such that each number is the sum of the two preceding ones, starting from 0 and 1.
Fibonacci code solution
Following the code implementation.
package algoTest
// a(1) =1, a(2) = 1, a(n) = a(n-1) + a(n-2)
// Closer solution
func Fibonacci() func() int {
first := true
a, b := 0, 1
return func() int {
if first {
first = false
return 0
}
a, b = b, a + b
return a
}
}
Following the code test for it.
package algoTest
import (
"fmt"
"github.com/stretchr/testify/assert"
"testing"
)
func TestFibonacci(t *testing.T) {
// 0,1,2,3,5,8,13,21
f:= Fibonacci()
for i := 0; i < 10; i++ {
res := f()
fmt.Println(res)
switch i {
case 0:
assert.Equal(t, 0, res)
case 1:
assert.Equal(t, 1, res)
case 2:
assert.Equal(t, 1, res)
case 3:
assert.Equal(t, 2, res)
case 4:
assert.Equal(t, 3, res)
case 5:
assert.Equal(t, 5, res)
case 6:
assert.Equal(t, 8, res)
case 7:
assert.Equal(t, 13, res)
case 8:
assert.Equal(t, 21, res)
}
}
assert.NotNil(t, f)
}
Fibonacci with recursion solution
Following the code implementation.
package algoTest
func FiboRec(n int) int {
if n == 0 || n == 1{
return n
}
return FiboRec(n - 2) + FiboRec(n - 1)
}
Following the code test for it.
package algoTest
import (
"fmt"
"testing"
"github.com/stretchr/testify/assert"
)
func TestFiboRec(t *testing.T) {
// 0,1,2,3,5,8,13,21
for i := 0; i < 10; i++ {
res := FiboRec(i)
fmt.Println(res)
switch i {
case 0:
assert.Equal(t, 0, res)
case 1:
assert.Equal(t, 1, res)
case 2:
assert.Equal(t, 1, res)
case 3:
assert.Equal(t, 2, res)
case 4:
assert.Equal(t, 3, res)
case 5:
assert.Equal(t, 5, res)
case 6:
assert.Equal(t, 8, res)
case 7:
assert.Equal(t, 13, res)
case 8:
assert.Equal(t, 21, res)
}
}
}