Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Recursividad

Estas en el tema de Recursividad en el foro de C/C++ en Foros del Web. int Mayor1 (int *V, int n) { int aux; if (n==0) return (V[0]); else { aux = Mayor1 (V, n-1); return ((V[n]> aux) ? V[n] ...
  #1 (permalink)  
Antiguo 08/04/2011, 16:29
Avatar de molinojopiento  
Fecha de Ingreso: septiembre-2004
Mensajes: 128
Antigüedad: 19 años, 7 meses
Puntos: 1
Recursividad

int Mayor1 (int *V, int n)
{
int aux;
if (n==0)
return (V[0]);
else {
aux = Mayor1 (V, n-1);
return ((V[n]> aux) ? V[n] : aux);
}


Este algoritmo busca el maximo de un vector, pero alguien podria explicarme con manzanitas como lo hace? no entiendo la logica de la recursivdiad y si tienen algun material para poder entender el concepto me lo postean porfavor. ;)

GRACIAS.
__________________
:-D algun dia sere el mejor....... :aplauso:
  #2 (permalink)  
Antiguo 11/04/2011, 06:19
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 13 años, 10 meses
Puntos: 73
Respuesta: Recursividad

Una función recursiva es aquella que se llama a sí misma, bien directamente, como en este caso, o bien indirectamente, cuando se vuelve a llamar a la función desde otras funciones que ya han sido llamadas por ella.

En este caso, la función recibe un array de enteros (int *V) y un valor n, que indica el tamaño de ese array. Funciona de este modo:

Si n vale 0, tengo un array de solo un elemento, y por lo tanto este es el mayor, y este es el que devuelvo como resultado (return V[0]).

Si n no vale 0, guardo en aux el máximo del array pero con un elemento menos, fíjate que la función se llama a sí misma pasando el mismo vector pero con un elemento menos. Este valor devuelto en aux lo comparo con el elemento actual, y devuelvo el mayor de ellos.

Por ejemplo: Supongamos V={1,3,2} (lo que supone n=2, los índices de arrays en C/C++ siempre comienzan en cero).

Primera llamada (inicial):

x = Mayor1 ( V = {1, 3, 2}, n = 2 )
___n == 2 (!=0), luego:
___aux = Mayor1 ( V = {1, 3}, n = 1 )
________n == 1 (!=0), luego:
________aux = Mayor ( V = {1}, n = 0 )
_____________n == 0, luego
_____________Devuelvo V[0] (1, en este caso)
________aux = 1, lo comparo con V[1] (==3)
________Devuelvo V[1] (que es 3)
____aux = 3, lo comparo con V[2] (==2)
____Devuelvo aux ( que es 3)

con lo que al final quedaría x=3.

Espero que entiendas el ejemplo.
  #3 (permalink)  
Antiguo 16/04/2011, 16:05
Avatar de molinojopiento  
Fecha de Ingreso: septiembre-2004
Mensajes: 128
Antigüedad: 19 años, 7 meses
Puntos: 1
Respuesta: Recursividad

Estoy muy agradecido , me ha sido de gran utilidad tu explicación, muchas gracias. Lo entendi perfectamente.

Gracias nuevamente.
__________________
:-D algun dia sere el mejor....... :aplauso:

Etiquetas: recursividad
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:24.