Recursividad e iteracion
Recursividad e iteracion

En programación, las operaciones pueden ser manejadas por recursividad o iteraciones. Recursividad es cuando utilizamos un método que se llama a sí mismo, directa o indirectamente. Una de las estructuras fundamentales de programación son los bucles, las cuales forman parte de las estructuras de la mayoría de los lenguajes.

Por ejemplo, existen dos estrategias para calcular 1+2+3+…+n. La primera estrategia es utilizando recursividad:

public static int sumaN_recursivo(int n){
return (n<=0)?0:n + sumaN_recursivo(n-1);
}

Luego, para iteración el método seria:

public static int sumaN_iterativo(int n){
int result= 0;
for(int i=1; i<=n; i++){
result +=i;
}
return result;
}

Usualmente, el código con recursividad es más consistente que el código con iteración. Solo hay una sentencia en el método de recursividad, y existe más de una sentencia en el método con iteraciones. Adicionalmente, los bucles, que incluyen varios bucles son complejos de leer y entender. La recursividad es más clara y simple para dividir problemas complejos en piezas manejables.

Pero, el uso de la recursividad presenta ciertas desventajas. Debido a que en la recursividad una función se llama a sí misma, involucra tiempo y espacio: debe utilizar mucha memoria de la pila de datos para trabajar los resultados. Por lo tanto, la solución recursiva para calcular 1+2+..+n no es tan eficiente como la solución iterativa.

El mayor problema que presenta la recursividad es que causa un error denominado: stack overflow, como se puede ver en la figura inferior. Al utilizar ambos métodos, en mi máquina, al realizar el cálculo para n=12 000, el método que utiliza iteraciones realizo el cálculo, mientras que el método que utiliza recursividad presento el error : java.lang.StackOverflowError.

Volcado de Pila
Volcado de Pila

Considero que, finalmente tenemos dos alternativas para resolver un problema. Lo adecuado es saber las ventajas y desventajas de cada uno y aplicar la mejor alternativa.


Basado en el Libro: Coding Interviews: Questions, Analysis & Solutions (Autor: Harry He )

Recursividad o Iteración
Si te gusto, comparte ...Email this to someone
email
Share on Facebook
Facebook
Tweet about this on Twitter
Twitter
Share on LinkedIn
Linkedin
Share on Google+
Google+
Etiquetado en:    

2 pensamientos en “Recursividad o Iteración

  • agosto 9, 2017 a las 2:16 pm
    Enlace permanente

    Es la mejor explicación que he encontrado! Gracias! Sería bueno que agregues otras desventajas de una solución iterativa.

    Responder
  • noviembre 5, 2017 a las 12:23 pm
    Enlace permanente

    hola, muchas gracias por la explicacion pero tengo una gran duda!! entre recursividad e iteración, ¿cómo influye la depuración de código?

    Responder

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Facebook
A %d blogueros les gusta esto: