elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Función para calcular los números de Fibonacci
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Función para calcular los números de Fibonacci  (Leído 2,777 veces)
Caster


Desconectado Desconectado

Mensajes: 786


Ver Perfil WWW
Función para calcular los números de Fibonacci
« 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


En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Función para calcular los números de Fibonacci
« Respuesta #1 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.


En línea

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


Desconectado Desconectado

Mensajes: 786


Ver Perfil WWW
Re: Función para calcular los números de Fibonacci
« Respuesta #2 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?
En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Función para calcular los números de Fibonacci
« Respuesta #3 en: 18 Mayo 2013, 13:56 pm »

En efecto ;)
En línea

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


Desconectado Desconectado

Mensajes: 786


Ver Perfil WWW
Re: Función para calcular los números de Fibonacci
« Respuesta #4 en: 18 Mayo 2013, 14:00 pm »

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

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines