Fibonacci y el Código Davinci

El codigo Da VinciPara quienes estamos relacionados con la Programación y las Ciencias de la Computación, alguna vez nos hemos que tenido que topar opn la serie de Fibonacci, ya sea para programarla o para estudiar su comportamiento. Cada número de esta famosa serie se obtiene de la suma de los dos anteriores.

La serie de Fibonacci tiene muchas aplicaciones, no solo en la computación sino también en ciencias que en las cuales las matematicas aparentemente no tienen mucho que ver.

Me tomo por sorpresa leer acerca de ésta (y otras cosas mas) en el libro: El código da Vinci de Dan Brown, por que es utilizada para encriptar un mensaje. No solo se trata de la serie de Fibonacci sino también del numero Phi = 1.618 llamado también la divina proporción. Algunas cuestiones matematicas estan muy relacionadas con la naturaleza las cuales se debe tener en cuenta al momento de pintar un cuadro.

Escribiré un post acerca de este interesante libro cuado termine de leerlo. Mientras tanto…

Sabemos que generar estos números es sencillo de programar. Debido a que los valores de la serie se hacen grandes muy grandes, el reto es generar la mayor cantidad de numeros de Fibonacci. Los tipos de datos números en los lenguajes de programación (int, double, float) tienen sus límites y el asunto es romper esos límites.

El siguiente es un programa es la forma recursiva de obtener el numero N de la serie de Fibonacci:

unsigned long Fibonacci(unsigned int n)
{
    if ((n == 0) || (n == 1))
	{
        return 1;
	}
	else
	{
        return (Fibonacci(n -1 ) + Fibonacci(n - 2));
    }
}

Puede que el programa sea dañino para la salud del Sistema Operativo, por ello también les escribí una versión no recursiva.

unsigned long Fibonacci(unsigned int n)
{
    if ((n == 0) || (n == 1))
	{
        return 1;
	}

	unsigned long last = 1;
	unsigned long curr = 1;
	unsigned long tmp  = 0;

	while(n > 2)
	{
		tmp = curr;
		curr = curr + last;
		last = tmp;
		n--;
	}
	return curr;
}

Con la primera función el calculo del numero 30 de Fibonacci demorará a l rededor de 5 segundos, para el numero 40 demorará unos minutos dependiendo del procesador que tengan. Si utilizan una cray esto sucederá un unos cuantos milisegundos. Hay quienes dicen que una cray se sale de un bucle infinito en 6 segundos.

Con el segundo programa logré calcular el numero 47 (2971215073), a partir del numero 48 empieza el desbordamiento. Existen otras formas de obtener el esto de números.

El programa para probar cualquiera de las dos formas es:

int main(int argc, char* argv[])
{
	if(argc <= 1)
	{
		cout<<"Modo de uso :"<<endl;
		cout<<"\t"<<argv[0]<<" N "<<endl<<endl;
		return 1;
	}
	cout<<Fibonacci(atoi(argv[1]));
	cout<<endl;
	return 0;
}

Si tienen problemas para compilar no olviden agregar el parámetro –lstdc++ al gcc (linux)

33 Responses to Fibonacci y el Código Davinci

  1. hola estoy haciendo un trabajo referido al fibonacci tengo que crear un programa en este y despues llevarlo a laenguaje pascal como ago si me puededs ayudar gracias. la pagina me parece muy importante y me sirvio de mucho.

  2. Te puedo ayudar con gusto pero no digiste exactamente en que punto puedo ayudarte.

  3. soy un etudiante de programacion y me gustaria saber mas de la serie de fibonacci en una manera mas sencilla

  4. hola necesito urgentemente un ejemplo en el cual se utilize la serie de fibonacci

  5. Hola, que tal??.

    Mira tengo un programa que hacer en C++ con la serie Fibonacci y ya lo hice en forma recursiva, pero cuando lo compilo no presenta el resultado, aquí te dejo mi código de como lo hice:


    #include
    #include

    int fib (int n);

    void main (void)
    {
    clrscr ();
    int n;
    printf ("Introduzca el número a calcular su serie:\n");
    scanf ("&d", &n);
    fib (n);
    }

    /** FUNCIÓN FIBONACCI**//

    int fib (int n)
    {
    if (n

  6. hola mira me han pedido un programa del fibonacci en C++ pero no se ni por donde empezar ojala y me pudieses ayudar tu vi el kodigo de uno ke esta aka en tu pagina, lo iva a bajar pero esta inkompleto ojala y me ayudaras tengo examen mañana es el ultimo y es hacerka de eso. ojala y me mandaras el codigo anterir para ke lo haga y si lo tienes kompleto pues haber si me lo puedes proporcionar

  7. Este -> Ricardo… asi no compila nada, comenzando la libreria, hasta el main…

    Hay muchas, muchas maneras de hacer un fibonacci, tanto por funciones de recursion, bucles (for, while, do-while, goto, etc..), de la forma como lo planteas creo que es RECURSIVO.

    Sigue asi, pero no olvides que debes tener cuidado con la condicion de PARADA.

    Saludos.

  8. I need the fibonacci’s series (c++) but made using arrays. May you help me?

  9. hola me gustaria saber que es el codigo fibonacci

  10. necesito con urgencia el programa de los numeros perfectos utilizando funciones(los 5 tipos)

  11. Hola, estoy necesitando un ejemplo en lenguaje Scheme de la serie de fibonacci, muchas gracias.

  12. solicito un programa que me solucione esto que cuando aeste elevado ala b de resultadfos pero teniendo encuentas tambien negativos

  13. unsigned long Fibonacci(unsigned int n)
    {
    if ((n == 0) || (n == 1))
    {
    return 1;
    }

    unsigned long last = 1;
    unsigned long curr = 1;
    unsigned long tmp = 0;

    while(n > 2)
    {
    tmp = curr;
    curr = curr + last;
    last = tmp;
    n–;
    }
    return curr;
    }

    BUENO ESTA BIEN EL PROGRAMA PERO TIENE UN PEQUEÑO PROBLEMA EN LA CONDICIÓN DE PERMANENCIA DEL BÚCLE WHILE YA QUE DEBERÍA SER N =>2

  14. HOLA FIJATE QUIERO HACER UN PROGRAMA FIBONACCI EN PASCAL PERO NO SE COMO PORQUE NO ME LO AN ENCEÑADO Y LO TENEMOS QUE INVESTIGAR HELPME PLEAS TANK’S

  15. #include
    #include
    #include
    #include
    main()
    {
    clrscr();
    gotoxy(8,8)cprintf(“HOLA”);
    }

  16. set talk off
    set color to r/g++
    clear
    store 0 TO A,B,C
    @3,50 say “PROGRAMA SUMA”
    @8,10 say “ingrese un numero: “get a
    @10,10 say “ingrese un numero: “get b
    read
    c=a+b
    @12,10 say “La suma es: “+str(c)
    return
    cancel

  17. #include
    #include
    #include
    #include
    #include
    main()
    {
    cout

  18. #include
    #include
    #include
    #include
    main()
    {
    int i,n;
    gotoxy(3,50)cprintf(“programa de numeros enteros”);
    for(i=1;i

  19. oie al principio de la pagina dices ke la serie de fibonacci no slolamente sirve para hacer programas sino para dejar mensajes ocultos como se puede hacer eso de verdad agradeceria una respuesta gracias .

    luis jesus martinez alvarado.

  20. Hola, me pregunto si podrias ayudar con el siguiente programa que me mandaron a hacer…

    Escriba un programa que calcule los números de Fibonacci

    Entrada y Salida:

    La entrada de su programa consiste en un archivo que contiene números enteros entre 0
    y 5000 cada uno por línea del archivo de entrada, la salida debe ser un archivo que tenga el mensaje “El numero Fibonacci de X es Y” donde X representa el numero de entrada y Y el numero
    de Fibonacci correspondiente
    Entrada de Ejemplo:
    5
    7
    11
    Salida de Ejemplo
    El numero Fibonacci de 5 es 5
    El numero Fibonacci de 7 es 13
    El numero Fibonacci de 11 es 89

  21. ola me gustaria saber como se ace el programa dela serie de fibonacci en visual basic 6.0 porfa

    pliz porke lo kiero estudiar

    sale

  22. Hay un pequeño error en el código recursivo. Donde pones “return 1″ deberia poner “return n”, porque si no, te da el resultado del término n + 1.

  23. hola yo tambien no se como se ace el codgo de la secuencia de fibonacci en bisuaol vasic 6.0 pero en cuanto lo tenga te lo mando este trbajo lo boy a entregar el 27 de abril del 2008 mi direccion es: ENJYBSM@hotmail.com contestame …

  24. me pidieron un comentario acerca de la pelicula
    del codigo da vinci con respecto ala serie de fibonacci no se si me pudieran ayudar por que la verdad no le entendi a la pelicula gracias

  25. Hola anteriormente leí acerca de una solicitud de un programa que genere la serie de fibonacci, pero utilizando arrays, sería interesante que alguien la pudiese mostrar, ya que por lo general solo presente ejemplos de recursividad

  26. oyem la serie fibonacci empiesa en un 0 y 1
    como puedo crear un programa que
    al ingresar un numero diga que ese numero es la posicion del n-esimo termino de la serie fibonacci?

  27. Encuentro por demas interesante todo esto, aunque me cuesta mucho trabajo comprenderlo, ciencia y arte… es espectacular!.

  28. #include
    #include
    int cero,suma,i,n;

    main()
    {
    clrscr();
    printf(“INGRESA EL NUMERO “);
    scanf(“%d”,&n);
    suma=1;
    cero=0;
    printf(“%d”,cero);
    printf(“+%d”,suma);
    if(n>=2){
    for(i=2;i<=n;i++)
    {
    cero=cero+suma;
    printf(“+%d”,cero);
    suma=suma+cero;
    printf(“+%d”,suma);
    }
    }
    getch();
    return(0);
    }

  29. que onda colega, pues aqui viendo tu peticion espero te sirva… muy sencillo.

    #include <stdio.h>
    #include <conio.h>
    int cero,suma,i,n;

    main()
    {
    clrscr();
    printf(“INGRESA EL NUMERO “);
    scanf(“%d”,&n);
    suma=1;
    cero=0;
    printf(“%d”,cero);
    printf(“+%d”,suma);
    if(n>=2){
    for(i=2;i<=n;i++)
    {
    cero=cero+suma;
    printf(“+%d”,cero);
    suma=suma+cero;
    printf(“+%d”,suma);
    }
    }
    getch();
    return(0);
    }

  30. encontre una manera mas facil de hacer la serie en c++
    ahi va el codigo:
    #include <stdio.h>
    #include <stdlib>
    #include <conio>

    int main (void)
    {
    double numa,cont=2;
    double numb;

    printf(“este programa calcula una serie a partir de dos numeros\ncuyo siguiente valor es la suma de los dos anteriores\n\n”);
    printf(“ingrese el primer numero de la serie:\ “);
    scanf(“%lf”, &numa);
    printf(“ingrese el segundo numero de la serie:\ “);
    scanf(“%lf”, &numb);
    printf(“\nla serie consta de los siguientes numeros:\n”);

    for(; cont < 50; cont++ )
    {
    numb = (numa + numb);
    numa = (numb – numa);
    printf (“%0.0lf\n” ,numb);
    }

    getch();
    return 0;
    }

    calcula los primeros 50 valores de cualquier serie parecida a la de fibonacci (osea q el siguietne numero es la suma de los 2 anteriores), le puse 50 xq asi me lo pidieron

    respecto a las expresiones

    numb= numa+numb
    numa= numb – numa

    la primera aumenta el numero b hasta el siguiente valor en la serie y la segunda aumenta el numero a al valor anterior de b (el cual es el siguiente valor de a en la serie)

    compila bien y te da hasta los primeros 84 valores de la serie, hasta “99194853094755488”
    osea noventa y nueve billones etc

    cualquier duda con respecto a este y solo este programa escribanme a tequila-333 (a?r¿r!o=b’a) hotmail.com, digo q me consulten solo x este xq recien empiezo a programar

  31. hola necesito un codigo para realizar la serie de fibonacci,numeros primos,para calcular la edad,eventos load-click y la tabla de multiplicar del 1al 9 si me pueden ayudar

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">

Go back to top