recursion - recursivos - ¿Cuáles son las ventajas y desventajas de la recursión?
recursividad en programacion c++ (8)
Expresividad
La mayoría de los problemas se expresan naturalmente por recursividad, como Fibonacci, clasificación por fusión y clasificación rápida. En este sentido, el código está escrito para humanos, no para máquinas.
Inmutabilidad
Las soluciones iterativas a menudo se basan en variables temporales variables que hacen que el código sea difícil de leer. Esto se puede evitar con la recursividad.
Actuación
La recursividad no es apilable. La pila puede desbordarse cuando la recursión no está bien diseñada o la optimización de la cola no es compatible.
Con respecto al uso de recursión sobre métodos no recursivos en algoritmos de clasificación o, para el caso, cualquier algoritmo, ¿cuáles son sus ventajas y desventajas?
Cualquier algoritmo implementado usando recursión también se puede implementar mediante iteración.
Por qué no usar recursión
- Por lo general, es más lento debido a la sobrecarga de mantener la pila.
- Usualmente usa más memoria para la pila.
Por qué usar la recursión
- La recursividad agrega claridad y (a veces) reduce el tiempo necesario para escribir y depurar código (pero no necesariamente reduce los requisitos de espacio o la velocidad de ejecución).
- Reduce la complejidad del tiempo.
- Se desempeña mejor en la resolución de problemas basados en estructuras de árbol.
Por ejemplo, el problema de la Torre de Hanoi se resuelve más fácilmente utilizando recursión en lugar de iteración.
En su mayor parte, la recursión es más lenta y también ocupa más de la pila. La principal ventaja de la recursión es que para problemas como el recorrido de árboles hace que el algoritmo sea un poco más fácil o más "elegante". Vea algunas de las comparaciones:
Para comenzar:
Pros:
- Es la forma única de implementar un número variable de bucles anidados (y la única manera elegante de implementar una gran cantidad constante de bucles anidados).
Contras:
- Los métodos recursivos arrojarán a menudo Exception al procesar grandes conjuntos. Sin embargo, los bucles recursivos no tienen este problema.
Recursividad significa que una función llama repetidamente
Utiliza la pila del sistema para realizar su tarea. Como la pila usa el enfoque LIFO y cuando se llama a una función, el control se mueve a donde se define la función que tiene guardada en la memoria con alguna dirección, esta dirección se almacena en la pila
En segundo lugar, reduce la complejidad del tiempo de un programa.
Aunque poco relacionado, un poco relacionado. Debe leer. : Recursión vs iteración
Surgiría alguna situación en la que tendrías que abandonar la recursión en un problema donde la recursividad parece ser ventajosa para ti, porque para problemas donde tu recursión debería ocurrir miles de veces, esto generaría un error de aun cuando tu código no quedar atrapado en una recursión infinita. La mayoría de los lenguajes de programación lo limitan a una cantidad de llamadas a la pila, de modo que si su recursión va más allá de este límite, entonces podría considerar no usar la recursión.
Todos los algoritmos se pueden definir recursivamente. Eso hace que sea mucho, mucho más fácil de visualizar y probar.
Algunos algoritmos (p. Ej., La Función de Ackermann ) no pueden (fácilmente) especificarse iterativamente.
Una implementación recursiva usará más memoria que un bucle si no se puede realizar la optimización de la cola de cola . Mientras que la iteración puede usar menos memoria que una función recursiva que no se puede optimizar, tiene algunas limitaciones en su poder expresivo.
Yo personalmente prefiero usar Iterative sobre la función recursiva. Especialmente si su función tiene lógica compleja / pesada y el número de iteraciones es grande. Esto porque con cada llamada recursiva aumenta la pila de llamadas. Podría colapsar la pila si las operaciones son demasiado grandes y también ralentiza el proceso.