Función para calcular los números de Fibonacci

Iniciado por Caster, 18 Mayo 2013, 13:07 PM

0 Miembros y 1 Visitante están viendo este tema.

Caster

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:

long int fibonacci (int cont)
{
    static long int f1 = 1, f2 = 2;
    long int f;
    f = (cont < 3) ? 1 : f1 + f2;
    f2 = f1;
    f1 = f;
    return(f):
   
}


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

amchacon

Citarpero 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:


#include <stdio.h>

void Ejemplo()
{
 static int Repeticiones = 0;

 printf ("Esta funcion ha sido repetida: %d \n",Repeticiones);
 
 Repeticiones++;
}

int main()
{
 Ejemplo();
 Ejemplo();
 Ejemplo();
 
 getchar(); // Pausa
 return 0;
}


Te debería mostrar por pantalla 0,1,2.
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

Caster

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?

amchacon

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

Caster

Pues ya queda todo resuelto entonces, muchísimas gracias.