Resumen: programar algoritmo Fibonacci en C de manera iterativa (usando un ciclo) y recursiva. También imprimir la sucesión fibonacci.
En este post vamos a trabajar con la sucesión Fibonacci para mostrar el número que iría en determinada posición de la serie; para imprimirla desde el 0 hasta un número y para hacer lo mismo usando recursividad.
Todo esto lo vamos a hacer en el lenguaje de programación C usando ciclos.
El algoritmo
Es muy simple, se comienza en 0
y 1
y después los siguientes números son la suma de los anteriores. Si queremos imprimir la sucesión, usamos printf.
Vamos a hacer funciones que devuelven el número que va en determinada posición de la sucesión. Por ejemplo, ya que la sucesión es:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765
Podemos decir que el número que va en la posición 7
es 13
(contando desde el 0
)
Fibonacci iterativo en C
Veamos la primer función que devuelve el número que va en la sucesión, y que además permite imprimir la misma.
long fibonacci(long posicion, int imprimir) {
long siguiente = 1, actual = 0, temporal = 0;
for (long x = 1; x <= posicion; x++) {
if (imprimir)
printf("%ld, ", actual);
temporal = actual;
actual = siguiente;
siguiente = siguiente + temporal;
}
if (imprimir)
printf("%ld", actual);
return actual;
}
Recibe la posición hasta la que queremos imprimir y un booleano para decir si la sucesión debe imprimirse o no. Devuelve el número de la sucesión fibonacci que va en la posición solicitada.
Su modo de uso es el siguiente, en el primer caso imprimimos la sucesión:
// No queremos almacenar el resultado, solo imprimir la serie
fibonacci(20, 1);
// Ahora sí queremos el resultado y no queremos imprimir
unsigned long fibonacciDe10 = fibonacci(10, 0);
printf("\nFibonacci de 10 es: %ld", fibonacciDe10);
En la línea 1 simplemente invocamos a la función y no necesitamos almacenar el resultado porque simplemente queremos imprimir la sucesión fibonacci en C.
Después, en la línea 4 y 5 almacenamos el valor y no imprimimos la serie. Al final la salida es:
Ahora vamos a ver el Fibonacci recursivo en C.
Fibonacci recursivo en C
Lo siguiente es la implementación de este algoritmo pero usando recursividad o recursión. Queda así:
long fibonacciRecursivo(long posicion) {
if (posicion < 2)
return posicion;
return fibonacciRecursivo(posicion - 1) + fibonacciRecursivo(posicion - 2);
}
En este caso no imprime nada, simplemente devuelve el número que va en la posición. Por ejemplo:
unsigned long fibonacciDe10 = fibonacciRecursivo(10);
printf("Fibonacci de 10 es: %ld", fibonacciDe10);
Conclusiones y notas finales
No olvides que la función devuelve el número que va en determinada posición pero comienza a contar desde el 0, así como la notación de arreglos; es decir, si quieres el número que va en la primera posición invoca al algoritmo con la posición 0.