Duda con función recursiva

Iniciado por DickGumshoe, 7 Junio 2012, 15:29 PM

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

DickGumshoe

Hola.

Tengo un ejercicio que dice:

Implemente una función recursiva (y todo lo necesario para que el programa funcione) que calcule, dado un vector de enteros y un umbral, la suma de todos los elementos del vector que son mayores que el umbral. La cabecera de la función recursiva debe ser la siguiente:

void SumaUmbral(int *v, int tam, int umbral, int *suma);

El vector debe ser creado con memoria dinámica y pedido al usuario por la consola. La variable suma se pasa por referencia. La variable tam contiene el tamaño del vector.


El problema que tengo es que yo siempre he pensado que las funciones recursivas deben devolver algo... ¿Cómo va a ser void?

Saludos, y muchas gracias.

kingdarnakes

Te has respondido tu mismo:
Citar
El vector debe ser creado con memoria dinámica y pedido al usuario por la consola. La variable suma se pasa por referencia. La variable tam contiene el tamaño del vector.

DickGumshoe

Me refiero a que yo las funciones recursivas las he hecho siempre así:


if(CASO BASE) return ALGO; (matriz, vector, una variable...)

else
{
...
...
return NombreFunciónRecursiva (parámetros);
}

Gracias.

Saberuneko

Por definición, las funciones siempre deberían devolver algo, si.

Es raro.

No sabría decirte cómo va eso exactamente...

¿Estás seguro de que copiaste bien el enunciado del ejercicio?

DickGumshoe

Pues le ha caído el ejercicio a mi hermana en un examen que ha hecho hoy, y el prototipo era ese (lo ha comprobado muchas veces, y por eso lo he preguntado).

Muchas gracias por aclararme la duda.

Saludos.

kingdarnakes

Cita de: Saberuneko en  7 Junio 2012, 16:03 PM
Por definición, las funciones siempre deberían devolver algo, si.

Es raro.

No sabría decirte cómo va eso exactamente...

¿Estás seguro de que copiaste bien el enunciado del ejercicio?

Amigo, estas equivocado que devuelve una función void?, en otros lenguajes se llaman procedimientos.

No te voy hacer la función para demostrártelo, pero creo que no tienes claro que significa que una variable se pase por referencia. Revisa ese concepto. El resto sería todo igual, buscas el caso base o los casos bases y ya esta.

DickGumshoe

Pasar una variable por referencia es pasar una copia del contenido de dicha variable, ¿no?

De ser así, además de que siempre he pensado que las funciones recursivas no podían ser void, aunque lo pudiera ser, no modificaría el contenido de *suma en main()...

Saberuneko

#7
Cita de: DickGumshoe en  7 Junio 2012, 16:34 PMPasar una variable por referencia es pasar una copia del contenido de dicha variable, ¿no?

No, lo que pasas es una dirección de puntero a la variable original.
En resumen, estás modificando sobre la variable original, no sobre una copia.

CitarAmigo, estas equivocado que devuelve una función void?, en otros lenguajes se llaman procedimientos.

Cuando se me enseñó, en los enunciados se las llamaba procedimientos directamente, no "funciones que devuelven void".

0xDani

Al contrario, pasas una copia de una variable cuando la pasas por valor, si la pasas por referencia el valor de la variable va a permanecer alterado cuando se vaya la funcion, y aunque la funcion en si no retorne nada, si va a modificar el contenido de la variable.

Saludos ;D
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM

DickGumshoe

Ah, sí, me he confundido y he puesto la definición del paso por valor...

Entonces, ¿se puede hacer la función recursiva que he mencionado usando void?

Muchas gracias.