Recursividad en la estructura de datos: cómo funciona, tipos y cuándo se usa
Publicado: 2020-05-22Comencemos con la definición de recursividad en la estructura de datos. Más adelante discutiremos diferentes tipos de recursión y cómo se usa la recursión para resolver diferentes problemas.
Tabla de contenido
¿Qué es la recursividad?
En palabras simples, la recursión es una solución de problemas y, en algunos casos, una técnica de programación que tiene una propiedad muy especial y exclusiva. En recursividad, una función o método tiene la capacidad de llamarse a sí mismo para resolver el problema. El proceso de recursividad implica resolver un problema convirtiéndolo en variedades más pequeñas de sí mismo.
El proceso en el que una función se llama a sí misma puede ocurrir tanto directa como indirectamente. Esta diferencia de llamada da lugar a distintos tipos de recursividad, de los que hablaremos un poco más adelante. Algunos de los problemas que se pueden resolver mediante la recursividad incluyen DFS of Graph, Towers of Hanoi, Different Types of Tree Traversals y otros. Para obtener más información sobre recursión y otros conceptos de ciencia de datos, consulte los cursos en línea de ciencia de datos de IIIT-B.
Leer: 13 ideas interesantes de proyectos de estructura de datos
¿Cómo funciona la recursividad?
El concepto de recursividad se establece sobre la idea de que un problema puede resolverse con mucha más facilidad y en menor tiempo si se representa en una o más pequeñas versiones. Agregar condiciones base para detener la recursividad es otra parte importante del uso de este algoritmo para resolver un problema.
No se requiere experiencia en codificación. Soporte de carrera 360°. Diploma PG en Machine Learning & AI de IIIT-B y upGrad.La gente suele creer que no es posible definir una entidad en términos de sí misma. La recursividad demuestra que la teoría está equivocada. Y si esta técnica se lleva a cabo de la forma adecuada, podría dar resultados muy potentes. Veamos cómo funciona la recursividad con algunos ejemplos. ¿Qué es una oración? Se puede definir como dos o más oraciones unidas con la ayuda de la conjunción. De manera similar, una carpeta podría ser un dispositivo de almacenamiento que se utiliza para almacenar archivos y carpetas. Un antepasado puede ser padre de uno y antepasado de otro miembro de la familia en el árbol genealógico.
La recursividad ayuda a definir situaciones complejas usando unas pocas palabras muy simples. ¿Cómo definirías normalmente a un antepasado? Un padre, un abuelo o un bisabuelo. Esto podría continuar. Del mismo modo, definir una carpeta puede ser una tarea difícil. Podría ser cualquier cosa que contenga algunos archivos y carpetas que podrían ser archivos y carpetas por derecho propio, y esto podría continuar nuevamente. Esta es la razón por la que la recursividad hace que definir situaciones sea mucho más fácil de lo habitual.
La recursividad también es una técnica de programación bastante buena. Una subrutina recursiva se define como aquella que directa o indirectamente se llama a sí misma. Llamar a una subrutina directamente significa que la definición de la subrutina ya tiene la declaración de llamada de llamar a la subrutina que se ha definido.
Por otro lado, la llamada indirecta de una subrutina ocurre cuando una subrutina llama a otra subrutina, que luego llama a la subrutina original. La recursividad puede usar unas pocas líneas de código para describir una tarea muy compleja. Volvamos ahora nuestra atención a los diferentes tipos de recursividad que ya hemos mencionado.
Lea también: Los 6 mejores lenguajes de programación para aprender
Tipos de recursividad
Solo hay dos tipos de recursividad como ya se ha mencionado. Veamos en qué se diferencian entre sí. La recursividad directa es la forma más sencilla, ya que solo implica un único paso para llamar a la función, método o subrutina original. Por otro lado, la recursividad indirecta implica varios pasos.
La primera llamada la realiza el método original a un segundo método, que a su vez llama al método original. Esta cadena de llamadas puede presentar varios métodos o funciones. En palabras simples, podemos decir que siempre hay una variación en la profundidad de la recursividad indirecta, y esta variación en la profundidad depende de la cantidad de métodos involucrados en el proceso.
La recursividad directa se puede usar para llamar a una sola función por sí misma. Por otro lado, la recursividad indirecta se puede usar para llamar a más de un método o función con la ayuda de otras funciones, y eso también, varias veces. La recursividad indirecta no genera gastos generales, mientras que su contraparte directa sí.

¿Cuándo se usa la recursividad?
Hay situaciones en las que puede utilizar la recursividad o la iteración. Sin embargo, siempre debe elegir una solución que parezca ser la opción más natural para un problema. Una recursividad siempre es una opción adecuada cuando se trata de abstracción de datos. Las personas a menudo usan definiciones recursivas para definir datos y operaciones relacionadas.
Y no estará mal decir que la recursividad es principalmente la solución natural para los problemas asociados con la implementación de diferentes operaciones en los datos. Sin embargo, hay ciertas cosas relacionadas con la recursividad que pueden no convertirla en la mejor solución para todos los problemas. En estas situaciones, una alternativa como el método iterativo es la mejor opción.
La implementación de la recursividad usa mucho espacio de pila, lo que a menudo puede resultar en redundancia. Cada vez que usamos la recursividad, llamamos a un método que da como resultado la creación de una nueva instancia de ese método. Esta nueva instancia lleva diferentes parámetros y variables, que se almacenan en la pila y se toman en la devolución. Entonces, si bien la recursividad es la solución más simple que otras, generalmente no es la más práctica.
Además, no tenemos un conjunto de reglas predefinidas que puedan ayudar a elegir la iteración o la recursividad para diferentes problemas. El mayor beneficio de usar la recursividad es que es un método conciso. Esto hace que leerlo y mantenerlo sea una tarea más fácil de lo habitual. Pero los métodos recursivos no son los métodos más eficientes disponibles para nosotros, ya que ocupan mucho espacio de almacenamiento y consumen mucho tiempo durante la implementación.
Tener en cuenta algunas cosas puede ayudarlo a decidir si elegir una recursividad para un problema es el camino correcto o no. Debe elegir la recursividad si el problema que va a resolver se menciona en términos recursivos y la solución recursiva parece menos compleja.
Debe saber que la recursión, en la mayoría de los casos, simplifica la implementación de los algoritmos que desea utilizar. Ahora bien, si las complejidades asociadas con el uso de la iteración y la recursividad son las mismas para un problema determinado, debe optar por la iteración, ya que las posibilidades de que sea más eficiente son mayores.
Consulte también: 23 mejores cursos de programación informática para conseguir un trabajo
Conclusión
Sin embargo, puede haber situaciones en las que tomar una decisión no sea tan fácil. Tienes que elegir entre eficiencia y simplicidad. Si eres un diseñador experimentado, sabrás exactamente cuándo darle más importancia a la eficiencia y cuándo elegir la simplicidad o la concisión por encima de ella.
Si tiene curiosidad por aprender sobre estructura de datos, ciencia de datos, consulte el Programa PG Ejecutivo en Ciencia de Datos de IIIT-B y upGrad, creado para profesionales que trabajan y ofrece más de 10 estudios de casos y proyectos, talleres prácticos prácticos, tutoría con la industria. expertos, 1 a 1 con mentores de la industria, más de 400 horas de aprendizaje y asistencia laboral con las mejores empresas.
¿Cuál es la aplicación más común de la recursividad en la vida real?
La recursividad es un proceso en el que la función se llama a sí misma directa o indirectamente para resolver el problema. La función que realiza el proceso de recursividad se llama función recursiva. Hay ciertos problemas que se pueden resolver bastante fácilmente con la ayuda de un algoritmo recursivo.
La aplicación de recursividad más común en la vida real es cuando calcula cuánto dinero tiene en una caja llena de Rs. 100 notas Si hay demasiados billetes, puedes pedirle a tu amigo que haga el mismo trabajo dividiendo todo el montón en dos. Una vez que ambos hayan terminado de contar, simplemente sumarán ambos resultados para obtener la cantidad total.
¿Cuáles son las propiedades que debe tener una función recursiva?
Una función recursiva tiene la capacidad de continuar como un bucle infinito. Hay dos propiedades que deben definirse para cualquier función recursiva para evitar que entre en un bucle infinito. Ellos son:
1. Criterios básicos: tiene que haber una condición básica predefinida. Siempre que se cumpla este criterio base, la función dejará de llamarse a sí misma.
2. Enfoque progresivo: las llamadas recursivas deben consistir en un enfoque progresivo. Cada vez que se realiza una llamada recursiva a la función, debe estar cerca de la condición base.
¿Cuáles son las ventajas y desventajas de la recursividad?
Algunas de las ventajas de la recursividad son que solo necesita definir la condición base y el caso recursivo en una función recursiva. Esto hace que el código sea bastante simple y corto en comparación con un código iterativo, y algunos problemas como Tree Traversal y Graph son inherentemente recursivos.
Las mayores desventajas de la recursividad son que hay mayores requisitos de espacio para las funciones recursivas en comparación con un programa iterativo porque cada llamada de función tiene que permanecer en la pila hasta que se cumpla la condición base, y también hay mayores requisitos de tiempo, porque la pila crece después de cada llamada de función, y la respuesta final solo se puede devolver después de sacar todos los elementos de la pila.