Ver Mensaje Individual
  #2 (permalink)  
Antiguo 15/02/2012, 19:14
starfix
 
Fecha de Ingreso: diciembre-2011
Ubicación: Crespo - Entre Rios
Mensajes: 155
Antigüedad: 12 años, 4 meses
Puntos: 25
Respuesta: Funciones recursivas

podrias hacer el seguimiento de la funcion para ver como funciona:

supongamos que llamamos a la funcion con el valor 4:

- n= 4
- n es distinto de 1, por lo tanto no se ejecuta el codigo del if
- retornar 4 * factorial(3)

en este ultimo punto se puede observar la recursividad, es decir, una funcion que se llama a si misma. Para determinar el valor de retorno se ejecuta nuevamente la funcion pero con n=3.
la funcion queda en un modo "stand by", esperando a que se obtenga un valor que se pueda usar.

ahora se ejecuta la funcion factorial con n=3
- 3 es distinto de 1, por lo tanto no se ejecuta el codigo del if
- retornar 3 * factorial(2)


nuevamente se ejecuta la funcion con n=2
- 2 es distinto de 1, por lo tanto no se ejecuta del codigo del if
- retornar 2 * factorial(1)

nuevamente se ejecuta la funcion con n=1
- 1 es igual a 1, por lo tanto se retorna el valor 1

- ahora factorial(1) vale 1, entonces podemos resolver la linea donde puse "retornar 2*factorial(1)", que ahora es lo mismo que "retornar 2*1".

- ahora factorial(2) vale 2, entonces podemos resolver la linea donde puse "retornar 3*factorial(2)", que ahora es lo mismo que "retornar 3*2"

- ahora factorial(3) vale 6, entonces podemos resolver la linea donde puse "retornar 4*factorial(3)", que ahora es lo mismo que "retornar 4*3"

- el resultado del llamado a la funcion sera 12.



cabe aclarar que usar funciones recursivas consume mucha memoria, te recomiendo que las utilices solamente cuando sean la ultima opcion, si se puede hacer de otra manera mejor. Este ejemplo se puede hacer de varias maneras diferentes, pero es el mas facil de ver la recursividad.


saludos y espero que hayas entendido la explicacion