Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Caster en 18 Mayo 2013, 13:07 pm



Título: Función para calcular los números de Fibonacci
Publicado por: Caster en 18 Mayo 2013, 13:07 pm
Buenas, en un libro que estoy leyendo estoy con el tema de variables automáticas, estáticas, etc y de ejemplo me ponen un programa para calcular los números de Fibonacci que utiliza la siguiente función:

Código
  1. long int fibonacci (int cont)
  2. {
  3.    static long int f1 = 1, f2 = 2;
  4.    long int f;
  5.    f = (cont < 3) ? 1 : f1 + f2;
  6.    f2 = f1;
  7.    f1 = f;
  8.    return(f):
  9.  
  10. }

No entiendo el uso de las variables, vaya cacao tengo hecho, porque al principio f1 y a f2 se le asignan los valores 1 y 2 respectivamente pero después se les vuelve a asignar los números anteriores al número actual de la sucesión ( no se si me estoy explicando bien), eso en la primera llamada a la función, pero por lo que entendí leyendo, supuestamente cuando se vuelve a llamar a la función las variables f1 y f2 volverían a tomar los valores 1 y 2, eso entendí yo, por eso no entiendo como funcionan aquí las variables, perdonad si no me explico muy bien, pero no se explicarme con el cacao que tengo en mente.
Para no armaros un lío, cont es una variable fuera de la función que cuenta las pasadas por un bucle while y saber cuantos números hay que mostrar de la sucesión.

Saludos


Título: Re: Función para calcular los números de Fibonacci
Publicado por: amchacon en 18 Mayo 2013, 13:25 pm
Citar
pero por lo que entendí leyendo, supuestamente cuando se vuelve a llamar a la función las variables f1 y f2 volverían a tomar los valores 1 y 2, eso entendí yo
Ahí está tu error.

Las variables static son variables que "persisten". Cuando se ejecutan por primera vez obtienen el valor 1 y 2 pero después mantienen su valor al finalizar la función. Aquí tienes otro ejemplo:

Código
  1. #include <stdio.h>
  2.  
  3. void Ejemplo()
  4. {
  5.  static int Repeticiones = 0;
  6.  
  7.  printf ("Esta funcion ha sido repetida: %d \n",Repeticiones);
  8.  
  9.  Repeticiones++;
  10. }
  11.  
  12. int main()
  13. {
  14.  Ejemplo();
  15.  Ejemplo();
  16.  Ejemplo();
  17.  
  18.  getchar(); // Pausa
  19.  return 0;
  20. }

Te debería mostrar por pantalla 0,1,2.


Título: Re: Función para calcular los números de Fibonacci
Publicado por: Caster en 18 Mayo 2013, 13:33 pm
Vale, el problema estaba en que entendí yo mal, a ver si entendí bien, si al inicializar una variable estática dentro de una función le asigno el valor 2 por ejemplo y después durante la ejecución de la función le asigno el valor 4 y sale de la función, cuando se vuelve a llamar a la función, dicha variable tendrá el valor 4 ¿no?


Título: Re: Función para calcular los números de Fibonacci
Publicado por: amchacon en 18 Mayo 2013, 13:56 pm
En efecto ;)


Título: Re: Función para calcular los números de Fibonacci
Publicado por: Caster en 18 Mayo 2013, 14:00 pm
Pues ya queda todo resuelto entonces, muchísimas gracias.