Fibonacci secuencia
Fibonacci serie
Número Fibonacci
Ejemplos de la sucesión o serie fibonacci en Golang
Primer ejemplo fibonacci
package main
import (
"fmt"
"logica/algoritmos"
)
func fibonacci(n int) int {
a := 0
b := 1
// Iterate until desired position in sequence.
for i := 0; i < n; i++ {
// Use temporary variable to swap values.
temp := a
a = b
b = temp + a
}
return a
}
func main() {
// Display first 15 Fibonacci numbers.
for n := 0; n < 15; n++ {
// Compute number.
result := fibonacci(n)
fmt.Printf("Fibonacci %v = %v\n", n, result)
}
}
Segundo ejemplo fibonacci
Este ejemplo muestra la grandeza de Go, para hacer cualquier cosa que tu quieras sin complicaciones y de forma rápida y cómoda para cualquier dev.
package main
import "fmt"
// fibonacci is a function that returns
// a function that returns an int.
func fibonacci() func() int {
first := 0
second := 0
return func() int {
if first == 0 {
first = 1
second = 1
return 0
} else {
current := first
firstc := second
second = first + second
first = firstc
return current
}
}
}
func main() {
f := fibonacci()
for i := 0; i < 10; i++ {
fmt.Println(f())
}
}
Tercer ejemplo fibonacci
package algoritmos
func Fibonacci(n int) int {
a := 0
b := 1
// Iterate until desired position in sequence.
for i := 0; i < n; i++ {
// Use temporary variable to swap values.
temp := a
a = b
b = temp + a
}
return a
}
Estructura de directorios
Si quieres la misma estructura del ejemplo
logica
-algoritmo
--fibonacci.go
--fibonacci_test.go
main.go
- crea un directorio global = logica (sin acento)
- crearemos nuestro main.go
- crea un directorio algoritmo
- crea dentro de algoritmo un archivo fibonacci.go
- crea dentro de algoritmo un archivo fibonacci_test.go
Tienes prisa o tus dedos están cansados abre la terminal en el directorio logica y ejecuta el siguiente comando:
mkdir -p algoritmo && touch algoritmo/fibonacci.go algoritmo/fibonacci_test.go main.go
Test para fibonacci
package all_test
import (
"testing"
"logica/algoritmo"
)
func TestFibonacci(t *testing.T) {
// Definir casos de prueba
tests := map[int]struct {
n int
expected int
}{
0: {0, 0},
1: {1, 1},
2: {2, 1},
3: {3, 2},
4: {4, 3},
5: {5, 5},
10: {10, 55},
20: {20, 6765},
}
// Bucle para ejecutar pruebas
for _, tt := range tests {
actual := all.Fibonacci(tt.n)
if actual != tt.expected {
t.Errorf("fibonacciGood(%d) = %d; esperado %d", tt.n, actual, tt.expected)
}
}
}