Cómo hacer la serie de Fibonacci en C#
Genera la serie de Fibonacci en C# con un bucle for, una explicación paso a paso y una función reutilizable.
Actualizado el
La serie de Fibonacci empieza con 0 y 1. Cada número siguiente se obtiene sumando los dos anteriores.
La secuencia empieza así:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34...Código para generar Fibonacci en C#
Este ejemplo muestra los primeros 30 números de la serie:
int anterior = 0;
int actual = 1;
for (int i = 0; i < 30; i++)
{
Console.WriteLine(anterior);
int siguiente = anterior + actual;
anterior = actual;
actual = siguiente;
}Cómo funciona el código
anteriores el número que se imprime en cada vuelta; empieza en0.actualguarda el siguiente número de la serie; empieza en1.siguientesumaanterior + actual.- Al terminar la vuelta, los valores se desplazan:
anteriorpasa a valeractualyactualpasa a valersiguiente.
Por ejemplo:
0 + 1 = 1
1 + 1 = 2
1 + 2 = 3
2 + 3 = 5
3 + 5 = 8Función reutilizable
Si quieres reutilizarlo, puedes crear una función que devuelva una lista:
static List<int> Fibonacci(int cantidad)
{
var numeros = new List<int>();
if (cantidad <= 0)
{
return numeros;
}
int anterior = 0;
int actual = 1;
for (int i = 0; i < cantidad; i++)
{
numeros.Add(anterior);
int siguiente = anterior + actual;
anterior = actual;
actual = siguiente;
}
return numeros;
}La función devuelve una lista con exactamente cantidad elementos, empezando por 0, y una lista vacía si cantidad es cero o negativa.
Uso:
foreach (int numero in Fibonacci(10))
{
Console.WriteLine(numero);
}Fibonacci(10) devuelve los diez primeros valores de la serie, empezando por 0.
Con la convención de este ejemplo (F0 = 0, F1 = 1), F46 = 1.836.311.903 cabe en int.MaxValue = 2.147.483.647, pero F47 = 2.971.215.073 no. En long, F92 = 7.540.113.804.746.346.429 cabe en long.MaxValue = 9.223.372.036.854.775.807, pero F93 = 12.200.160.415.121.876.738 no. Para valores fuera de esos rangos, usa BigInteger de System.Numerics.
La función añade F_i y después calcula anterior + actual. Por eso, en la iteración i = 45 añade F45 y calcula anticipadamente F47 = F45 + F46 al solicitar 46 elementos. En contexto checked, ese cálculo lanza una excepción y la función no devuelve la lista, ni con 46 ni con 47 elementos. Solo en contexto unchecked la suma se envuelve: la función puede devolver correctamente los términos agregados para 46 (F0…F45) y 47 (F0…F46) elementos; con 48 ya incorpora un F47 incorrecto.