Saltar al contenido

Mentoring

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.

Mentoring 2 min de lectura

Actualizado el

Serie Fibonacci en C#

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

  • anterior es el número que se imprime en cada vuelta; empieza en 0.
  • actual guarda el siguiente número de la serie; empieza en 1.
  • siguiente suma anterior + actual.
  • Al terminar la vuelta, los valores se desplazan: anterior pasa a valer actual y actual pasa a valer siguiente.

Por ejemplo:

0 + 1 = 1
1 + 1 = 2
1 + 2 = 3
2 + 3 = 5
3 + 5 = 8

Funció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.