Foros del Web » Programación para mayores de 30 ;) » Java »

Dudas recursividad JAVA

Estas en el tema de Dudas recursividad JAVA en el foro de Java en Foros del Web. Bueno gente, antes que nada muchas gracias por la ayuda en los anteriores problemas, estoy agradecido que pierdan minutos de su vida en mi. Ahora ...
  #1 (permalink)  
Antiguo 17/03/2015, 12:15
 
Fecha de Ingreso: noviembre-2014
Mensajes: 34
Antigüedad: 7 años, 8 meses
Puntos: 1
Dudas recursividad JAVA

Bueno gente, antes que nada muchas gracias por la ayuda en los anteriores problemas, estoy agradecido que pierdan minutos de su vida en mi.

Ahora pasando a un tema que me esta volviendo loco jejeje..

Es la primera vez que veo recursividad y yo solo pensaba que solo repetía código un bucle.

Pero veo que no...

Entonces esto me mosquea mucho...

A ver un método recursivo es hacer un ejercicio mas chico, hasta llegar a la base?

Por ejemplo el factorial de un número

3! = 3 * 3 * 3

Con un bucle for lo haría así:

Código Java:
Ver original
  1. Public int GetFactorialConCiclo(int n){
  2. int acomulado = 1;
  3. for(int i = n; i >= 1;i--){
  4. acomulado * = 1;
  5. }
  6. return acumulado;
  7.  
  8. }


Pero no sabía yo que se podía hacer esto sin usar un solo bucle, solamente un método y llamandolo en el método princiapal


Que sería asi:

Código Java:
Ver original
  1. public int GetFactorialRecursivo(int n){
  2. if(n == 0){
  3. return 1;
  4. }
  5. else{
  6. return n * GetFactorialRecursivo(n-1);
  7. }
  8. }

El segundo es mas limpio, pero tengo muchas dudas

No entiendo la recursividad, tampoco entiendo por que el método actúa como un bucle,tampoco entiendo como sabe el mismo método que tiene que llegar hasta el final del numero factorial...

Si me lo explicas te estaré agradecido, si vas a poner un enlace a otra dirección web, porfavor que sea en español

Gracias.
  #2 (permalink)  
Antiguo 17/03/2015, 12:28
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 8 años
Puntos: 182
Respuesta: Dudas recursividad JAVA

Buenas,

Una función es recursiva si se llama a si misma.

Cita:
No entiendo la recursividad,
Es una duda muy genérica. En Google hay cientos de tutoriales y artículos que explican paso a paso la recursividad desde 0.

Cita:
tampoco entiendo por que el método actúa como un bucle
La función se llama a si misma con n-1. Esta a su vez se llama a si misma con n-1. Esta a su vez.... y así hasta que llega a 0 y hace return. En ese momento toda la pila de llamadas vuelve a retornar su valor hasta llegar a la original.

Le ejecución sería la siguiente:

1 - factorial (3) llama a factorial(2)
2 - factorial (2) llama a factorial(1)
3 - factorial (1) llama a factorial(0)
4 - factorial (0) devuelve 1
3 - factorial (1) devuelve 1 * 1
2 - factorial (2) devuelve 2 * 1 (1 * 1)
1 - factorial (3) devuelve 3 * 2 (2 * 1)
Resultado: 6


Lo mejor es que depures el código para ver como funciona.

Si no lo entiendes del todo tampoco te agobies. Las funciones recursivas permiten hacer algunas cosas de una forma más elegantes que con bucles, pero no siempre es más claro y sobre todo es mucho menos eficiente. Con el tiempo las encontrarás en muchos códigos, te acostumbrarás a ellas y las entenderás sin pensar mucho en ello...


Un saludo
__________________
If to err is human, then programmers are the most human of us

Etiquetas: dudas, 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 05:09.