Pages - Menu

viernes, 17 de mayo de 2013

Sucesión de Fibonacci en C


Uno de los ejercicios típicos que se plantean a la hora de aprender a programar en cualquier lenguaje es realizar un algoritmo que muestre la sucesión de Fibonacci (o serie de Fibonacci).


Fórmulas matemáticas
Foto tomada de freedigitalphotos.net

La sucesión de Fibonacci es una sucesión infinita de números en los que cada uno de ellos es el resultado de la suma de sus dos inmediatamente anteriores. La sucesión comienza tal que así:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987...

Por definición matemática la sucesión de Fibonacci es una sucesión recurrente, es decir, se necesita que se calculen términos anteriores bajo la misma definición para poder calcular uno de sus números. Es por esto por lo que la implantación de la serie en cualquier lenguaje de programación se podría considerar un clásico en los temas de bucles y recursividad.

Como parte práctica del curso básico de C y como complemento al último ejercicio planteado en la serie de 25 ejercicios sobre estructuras iterativas, voy a facilitar el código de dos programas que muestran los primeros 20 dígitos de la sucesión de Fibonacci, el primero será usando un bucle For y el segundo será mediante el uso de la recursividad.

Veamos cómo sería la sucesión de Fibonacci en C utilizando bucles:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
  int x,y,z,cont;

  x=0;
  y=1;
 
  printf("0\n1\n",z);
 
  for (cont=1;cont<=20;cont=cont+1)
  {
      z=x+y;
      printf("%d\n",z);
      x=y;
      y=z;
  }
 
  system("PAUSE");     
  return 0;
}

Ahora la sucesión de Fibonacci en C utilizando funciones recursivas:

#include <stdio.h>
#include <stdlib.h>

int fibonacci(int n)
{
  if (n>2)
    return fibonacci(n-1) + fibonacci(n-2);
  else if (n==2)
    return 1;
  else if (n==1)       
    return 1;
  else if (n==0)
    return 0;
}

int main(void)
{
    int num;

    for (num=0; num<=20; num++)
    {
      printf("%d\n", fibonacci(num));
    }
 
  system("PAUSE");     
  return 0;
}

¿Qué otras formas conoces de calcular la sucesión de Fibonacci?