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

 

 


Tema destacado: Tutorial básico de Quickjs


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  problemilla en c++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: problemilla en c++  (Leído 5,926 veces)
eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: problemilla en c++
« Respuesta #10 en: 5 Septiembre 2013, 13:11 pm »

Es necesario que una función se llame de forma recursiva 40 veces ???

Lo mismo sería más lógico que no fuese recursiva y encerrar ese código en un bucle.


En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: problemilla en c++
« Respuesta #11 en: 5 Septiembre 2013, 13:30 pm »

Vaya. Pues si, efectivamente estoy usando una función recursiva. Pero me parecería raro que fuese ahí el fallo porque únicamente le introduje unas variables nuevas que uso para comparar en condicionales...

Listo, el problema esta ahi sin duda, lo mas probable es que la condicion que hacia retornar sin llamarse a si misma a la funcion recursiva ya no se esta cumpliendo nunca.


En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
pABL012

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: problemilla en c++
« Respuesta #12 en: 5 Septiembre 2013, 13:55 pm »

Es necesario que una función se llame de forma recursiva 40 veces ???

Lo mismo sería más lógico que no fuese recursiva y encerrar ese código en un bucle.

La función recursiva puede llamarse 40 veces, 100 o 2. Eso no depende de mi. Como ya he dicho se trata de hacer una estadística, y el llamar la función recursiva depende de números aleatorios. La primera llamada a la función recursiva es la que se hace 40 veces aprox antes de morir el programa. Vamos que antes de morir ha entrado y salido del "bucle de recursividad" unas 40 veces de forma satisfactoria. Ojala fuese tan fácil como cambiar la recursividad por un bucle!  :)


Listo, el problema esta ahi sin duda, lo mas probable es que la condicion que hacia retornar sin llamarse a si misma a la funcion recursiva ya no se esta cumpliendo nunca.

Pues parece que tienes razón porque al eliminar la recursividad de momento no me está dando fallos, pero la recursividad me es necesaria. Voy a probar a quitarle variables inútiles de esas que se quedan sueltas de cuando uno está construyendo el programa la primera vez para evitar que se desborde la pila. Esto que dices de la condición que hacia retornar no lo entiendo. ¿Puedes poner un ejemplo?

Muchas gracias por las respuestas, y un saludo a todos.
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: problemilla en c++
« Respuesta #13 en: 5 Septiembre 2013, 14:09 pm »

Ejemplo simple:
http://c.conclase.net/curso/?cap=024

Código
  1. /* Función recursiva para cálculo de factoriales */
  2. int factorial(int n) {
  3.   if(n < 0) return 0;
  4.   else if(n > 1) return n*factorial(n-1); /* Recursividad */
  5.   return 1; /* Condicion de terminacion, n == 1 */
  6. }
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: problemilla en c++
« Respuesta #14 en: 5 Septiembre 2013, 15:08 pm »

La función recursiva puede llamarse 40 veces, 100 o 2. Eso no depende de mi. Como ya he dicho se trata de hacer una estadística, y el llamar la función recursiva depende de números aleatorios. La primera llamada a la función recursiva es la que se hace 40 veces aprox antes de morir el programa. Vamos que antes de morir ha entrado y salido del "bucle de recursividad" unas 40 veces de forma satisfactoria. Ojala fuese tan fácil como cambiar la recursividad por un bucle!  :)


Pues parece que tienes razón porque al eliminar la recursividad de momento no me está dando fallos, pero la recursividad me es necesaria. Voy a probar a quitarle variables inútiles de esas que se quedan sueltas de cuando uno está construyendo el programa la primera vez para evitar que se desborde la pila. Esto que dices de la condición que hacia retornar no lo entiendo. ¿Puedes poner un ejemplo?

Muchas gracias por las respuestas, y un saludo a todos.

Aprovechando el ejemplo de Eternal....

Código
  1. /* Función recursiva para cálculo de factoriales */
  2. int factorial(int n)
  3. {
  4.   if(n < 0) return 0;
  5.   else if(n > 1) return n*factorial(n-1); /* Recursividad */
  6.   return 1; /* Condicion de terminacion, n == 1 */
  7. }
  8.  
  9. /* Función sin recursividad para cálculo de factoriales */
  10. int factorial(int n)
  11. {
  12.   if(n < 0)
  13.      return 0;
  14.  
  15.   int total = 1;
  16.  
  17.   while ( n > 1 )
  18.   {
  19.      total *= n;
  20.      n--;
  21.   }
  22.  
  23.   return total;
  24. }
En línea

pABL012

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: problemilla en c++
« Respuesta #15 en: 6 Septiembre 2013, 02:46 am »

Definitivamente teníais razón. El problema era la recursividad. Al final lo he solucionado acotando el número de veces que puede llamarse a si misma la función.

Muchas gracias a todos por vuestra ayuda, y un saludo.
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: problemilla en c++
« Respuesta #16 en: 6 Septiembre 2013, 08:48 am »

De nadas  ::)
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: problemilla en c++
« Respuesta #17 en: 6 Septiembre 2013, 08:57 am »

Todo algoritmo recursivo puede programarse como un algoritmo iterativo.

De todas formas, 40 me parecen muy pocas veces.
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
Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

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