[ Foro de C ]

Ejercicio recursividad de fibonacci

14-Jan-2010 19:31
mario moreno
1 Respuestas

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

int fibonacci (int f){

   if ((f == 0) || (f == -1))
   return 1;
   else
   return fibonacci(f-1) + fibonacci(f-2);
}


   int main (void)

       {
           int r, valor;

           printf("0");
           printf("\n1");
           printf("\n1");

           for (valor = 1; valor <= 20 ; valor++){

           r = fibonacci(valor);
           printf("\n%d %d", valor, r);
           }


           return 0;
       }
Alguien puede poner la aclaración (para torpes) del funcionamiento del código. Supongo que para algunos será evidente, pero yo estoy un poco perdido.

Dónde me pierdo es:

si r = fibonacci(valor)... y "valor" va subiendo, o sea, que cada vez vale 1, 2, 3, 4, 5, etc... y suponiendo (si no lo he captado mal) que "f" se sustituye por (valor) en la función "int fibonacci (int f)"...

entonces "return fibonacci(f-1) + fibonacci(f-2);" ¿se podría interpretar cómo "return fibonacci(valor-1) + fibonacci(valor-2)?

si es así no logro ver de dónde sale la serie de fibonacci. Lo sé... hay que saber más, pero cada uno sabemos lo que sabemos. Como veis estoy hecho un verdadero lío. :(

Venga, gracias


16-Jan-2010 23:07
Nacho Cabanes (+83)

La serie de Fibonacci se define así:

- El primer término vale 1
- El segundo término vale 1
- Para los demás términos, cada uno de ellos es la suma de los dos que le preceden.

Esto corresponde a la función recursiva

int fibonacci (int termino){

   if ((termino == 1) || (termino == 2))
     return 1;
   else
     return fibonacci(termino-1) + fibonacci(termino-2);
}

Y entonces para calcular el 5º término de está sucesión, en tu programa usarías

fibonacci(5)

El ejemplo que tú has puesto calcula (y muestra) los 20 primeros términos de la función de fibonacci, aunque está hecho de forma un poco extraña, porque el término 0 (si se considera) debería valer 0 y el término -1 no está definido, así que "if" no está todo los bien que debería.

Para más detalles, mira:

http://es.wikipedia.org/wiki/Sucesi%C3%B3n_de_Fibonacci






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)