Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: DeMoNcRaZy en 8 Marzo 2015, 13:49 pm



Título: Consulta - Llamar función dentro de su misma función
Publicado por: DeMoNcRaZy en 8 Marzo 2015, 13:49 pm
Buenas,

Me gustaría consultarles algo y es lo siguiente:

He echo una calculadora en consola, y para repetir el proceso he echo una sentencia if llamando a la función dentro de su misma función, aquí el código:

Código
  1. #define suma(a,b) a + b
  2.  
  3. void sumando(){
  4. cout << "Introduce el primer valor: ";
  5. cin >> num1;
  6.  
  7. cout << "Introduce el segundo valor: ";
  8. cin >> num2;
  9.  
  10. suman = suma(num1, num2);
  11.  
  12. cout << "El resultado de la suma es: " << suman << endl;
  13.  
  14. cout << "Si quieres seguir sumando escribe '1' (si quieres salir escribe otro numero): ";
  15. cin >> seguir;
  16.  
  17. if(seguir == 1){
  18. sumando();
  19. }
  20. else;
  21. }

Como ven he llamado a la función sumando() dentro de su misma función, y me preguntaba si eso está bien.

No me da ningún error ni nada, me va perfectamente el programa, pero tengo esa consulta de si está bien.

Gracias, saludos.


Título: Re:
Publicado por: Bob1098 en 8 Marzo 2015, 14:18 pm
Creo que eso se llama recursividad de las funciones, y si es totalmente valido y muy útil en ocasiones como esa.


Título: Re: Consulta - Llamar función dentro de su misma función
Publicado por: ivancea96 en 8 Marzo 2015, 14:57 pm
Yo te recomendaría declarar la función como bool, y, desde el lugar donde la llamas, hacer un:
Código
  1. while(sumando());

Y convertir el if en:

Código
  1. if(seguir == 1)
  2.    return true;
  3. else
  4.    return false;

La recursividad es útil, pero este no es un caso donde sea necesaria. La recursividad tiende a hacer códigos más sencillos, pero a la vez puede dar más problemas, como un stack overflow.

Ye digo: "Usa cada cosa en su momento."


Título: Re: Consulta - Llamar función dentro de su misma función
Publicado por: rir3760 en 8 Marzo 2015, 17:24 pm
Yo te recomendaría declarar la función como bool, y, desde el lugar donde la llamas, hacer un:
Código
  1. while(sumando());

Y convertir el if en:

Código
  1. if(seguir == 1)
  2.    return true;
  3. else
  4.    return false;
Ya que el resultado de los operadores relacionales es el esperado (true si se cumple la condición, falso en caso contrario) la sentencia condicional se puede eliminar quedando solo la sentencia de retorno:
Código
  1. return seguir == 1;

Un saludo


Título: Re: Consulta - Llamar función dentro de su misma función
Publicado por: DeMoNcRaZy en 8 Marzo 2015, 17:29 pm
Gracias por sus respuestas.
Ya me voy haciendo ideas.

Saludos.