11/04/2011, 06:19
|
| | Fecha de Ingreso: junio-2010 Ubicación: Madrid
Mensajes: 620
Antigüedad: 14 años, 7 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. |