
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.

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 )
Es la mejor explicación que he encontrado! Gracias! Sería bueno que agregues otras desventajas de una solución iterativa.
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?