Curso 2024/2025
La instrucción return
se puede usar de dos maneras:
Sin argumento, para terminar una función sin devolver nada:
escribiendo return;
. Eso podemos hacerlo en funciones cuyo tipo de valor devuelto es
void
, es decir, que no tienen que devolver ningún resultado.
Con argumento, para terminar una función devolviendo un resultado:
escribiendo return
seguida del resultado a devolver (puede
ser una expresión que calcule el resultado). Eso podemos hacerlo en
funciones cuyo tipo de valor devuelto no es void
, es decir,
que tienen que devolver un resultado.
En los siguientes dos ejemplos, se está utilizando correctamente return
con argumento para devolver un resultado en una función que debe devolver un resultado:
En este
ejemplo de la primera práctica del curso, la instrucción return suma
sirve para devolver un
entero que tenemos en suma
.
En este
ejercicio de refuerzo del tema 1, la instrucción return
contarCifra(n / 10, cifra)
sirve para devolver el entero que nos
devuelve a nosotros la llamada recursiva.
Sin embargo, lo que se hace en los siguientes ejemplos, que ilustran errores típicos de estudiantes, es incorrecto, por alguno de estos motivos:
no devolver ningún resultado en funciones que deben devolverlo;
en funciones que no deben devolver ningún resultado, tratar de devolverlo o trabajar como si lo devolvieran;
llamar a una función para obtener el resultado que devuelve y no hacer nada con él.
int factorial (int n) { if (n <= 1) return 1; else n * factorial(n - 1); } int main () { cout << factorial(7); }
En el ejercicio 17.b del tema 1 puedes ver una forma correcta de hacer eso.
void mostrarVectorAlReves(const vector<int> & v, int fin) { if (fin >= 0) { cout << v[fin] << endl; return mostrarVectorAlReves(v, fin - 1); } } void mostrarVectorAlReves(const vector<int> & v) { return mostrarVectorAlReves(v, v.size() - 1); }
En esta solución del tema 1 puedes ver una forma correcta de hacer eso.
void mostrarVectorAlReves(const vector<int> & v, int fin) { if (fin >= 0) { cout << v[fin] << endl; cout << mostrarVectorAlReves(v, fin - 1); } } void mostrarVectorAlReves(const vector<int> & v) { cout << mostrarVectorAlReves(v, v.size() - 1); }
En esta solución del tema 1 puedes ver una forma correcta de hacer eso.
bool buscarDato(const vector<int> & v, int dato, int fin) { if (fin < 0) return false; buscarDato(v, dato, fin - 1); return v[fin] == dato; } bool buscarDato(const vector<int> & v, int dato) { return buscarDato(v, dato, v.size() - 1); }
En esta solución del tema 1 puedes ver una forma correcta de hacer eso.