Consulta - Llamar función dentro de su misma función

Iniciado por DeMoNcRaZy, 8 Marzo 2015, 13:49 PM

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

DeMoNcRaZy

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 (cpp) [Seleccionar]
#define suma(a,b) a + b

void sumando(){
cout << "Introduce el primer valor: ";
cin >> num1;

cout << "Introduce el segundo valor: ";
cin >> num2;

suman = suma(num1, num2);

cout << "El resultado de la suma es: " << suman << endl;

cout << "Si quieres seguir sumando escribe '1' (si quieres salir escribe otro numero): ";
cin >> seguir;

if(seguir == 1){
sumando();
}
else;
}


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.
Esta página web no está disponible - Google Chrome

Bob1098

Creo que eso se llama recursividad de las funciones, y si es totalmente valido y muy útil en ocasiones como esa.

ivancea96

Yo te recomendaría declarar la función como bool, y, desde el lugar donde la llamas, hacer un:
Código (cpp) [Seleccionar]
while(sumando());

Y convertir el if en:

Código (cpp) [Seleccionar]
if(seguir == 1)
    return true;
else
    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."

rir3760

Cita de: ivancea96 en  8 Marzo 2015, 14:57 PMYo te recomendaría declarar la función como bool, y, desde el lugar donde la llamas, hacer un:
Código (cpp) [Seleccionar]
while(sumando());

Y convertir el if en:

Código (cpp) [Seleccionar]
if(seguir == 1)
    return true;
else
    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 (cpp) [Seleccionar]
return seguir == 1;

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

DeMoNcRaZy

Gracias por sus respuestas.
Ya me voy haciendo ideas.

Saludos.
Esta página web no está disponible - Google Chrome