[ Foro de C ]
#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
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.)