Tema: Recursividad
Ver Mensaje Individual
  #2 (permalink)  
Antiguo 11/04/2011, 06:19
Fw190
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 13 años, 11 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.