TAI
Tema

Recursividad para Oposiciones TAI: Guía Completa

📝 31 preguntas 📖 Teoría 🎯 Preparación TAI

💡 Qué aprenderás

En este tema estudiarás todos los conceptos necesarios para responder correctamente las preguntas relacionadas con Recursividad en la oposición.

¿Qué es la recursividad?

La recursividad es una técnica de programación mediante la cual una función se llama a sí misma para resolver un problema dividiéndolo en subproblemas más pequeños de la misma naturaleza.

Una función recursiva continúa ejecutándose hasta que se alcanza una condición de parada (caso base), momento en el que finalizan las llamadas y comienza el retorno de resultados.

📖 Definición
La recursividad permite resolver problemas complejos mediante la repetición de una misma operación sobre versiones más pequeñas del problema.

Conceptos fundamentales

Para comprender la recursividad es imprescindible conocer los siguientes conceptos:

  • Función recursiva: función que se invoca a sí misma.
  • Caso base: condición que detiene la recursión.
  • Caso recursivo: parte de la función que realiza la llamada recursiva.
  • Pila de llamadas (Call Stack): estructura donde se almacenan las llamadas pendientes.
  • Profundidad de recursión: número de llamadas recursivas realizadas.
🎯 Muy preguntado
Toda función recursiva debe tener un caso base, de lo contrario producirá una recursión infinita.

Funcionamiento de la recursividad

Cuando una función recursiva se ejecuta:

  1. Comprueba el caso base.
  2. Si no se cumple, realiza una llamada a sí misma.
  3. Cada llamada queda almacenada en la pila.
  4. Al alcanzarse el caso base, las llamadas comienzan a resolverse en orden inverso.
función(4)

↓

función(3)

↓

función(2)

↓

función(1)

↓

Caso base

↑

Retorno

↑

Retorno

↑

Retorno
💡 Consejo para el examen
La ejecución de una función recursiva consta de dos fases: descenso de llamadas y retorno de resultados.

Estructura de una función recursiva

Toda función recursiva presenta dos partes claramente diferenciadas:

Caso base

Es la condición que detiene las llamadas recursivas.

Sin él, la función nunca finalizaría.

Caso recursivo

Es la parte donde la función vuelve a llamarse con un problema más pequeño.

Cada llamada debe acercarse progresivamente al caso base.

🎯 Muy preguntado
El problema debe reducirse en cada llamada; de lo contrario, la recursión nunca terminará.

La pila de llamadas (Call Stack)

Cada llamada recursiva crea un nuevo marco de ejecución en la pila de llamadas.

La pila almacena:

  • Variables locales.
  • Parámetros.
  • Dirección de retorno.

Cuando finaliza una llamada, su información se elimina de la pila.

┌──────────────┐
│ función(1)   │
├──────────────┤
│ función(2)   │
├──────────────┤
│ función(3)   │
├──────────────┤
│ función(4)   │
└──────────────┘
📌 Recuerda
La recursividad consume memoria porque cada llamada permanece almacenada hasta finalizar.

Ejemplo: cálculo del factorial

El factorial de un número se define como:

n! = n × (n − 1)!

0! = 1

Ejemplo para 4!:

4!

↓

4 × 3!

↓

4 × 3 × 2!

↓

4 × 3 × 2 × 1!

↓

4 × 3 × 2 × 1

=

24

Este problema resulta especialmente adecuado para resolverse mediante recursividad.

💡 Consejo para el examen
El cálculo del factorial es el ejemplo clásico utilizado para explicar la recursividad.

Ejemplo: recorrido de un árbol

La recursividad también se utiliza para recorrer estructuras jerárquicas.

Ejemplos:

  • Árboles binarios.
  • Sistemas de archivos.
  • Estructuras XML o JSON.
  • Directorios.
Raíz

├── Nodo A

│   ├── A1

│   └── A2

└── Nodo B

    ├── B1

    └── B2

Cada nodo aplica exactamente el mismo algoritmo sobre sus hijos.

🎯 Muy preguntado
La recursividad es especialmente útil cuando el problema tiene una estructura jerárquica.

Ventajas de la recursividad

Entre sus principales ventajas destacan:

  • Código más sencillo.
  • Soluciones elegantes.
  • Facilita el tratamiento de estructuras jerárquicas.
  • Reduce la complejidad de algunos algoritmos.
  • Muy utilizada en algoritmos divide y vencerás.
💡 Consejo para el examen
En algunos problemas la solución recursiva resulta mucho más fácil de comprender que la iterativa.

Inconvenientes

La recursividad también presenta limitaciones:

  • Mayor consumo de memoria.
  • Más llamadas a funciones.
  • Menor rendimiento en algunos casos.
  • Riesgo de desbordamiento de pila (Stack Overflow).
⚠️ Error habitual
Una recursión muy profunda puede provocar un error de desbordamiento de pila.

Recursividad vs Iteración

Recursividad Iteración
Utiliza llamadas a funciones Utiliza bucles
Emplea la pila de llamadas No necesita llamadas recursivas
Código más elegante Mayor eficiencia en muchos casos
Mayor consumo de memoria Menor consumo de memoria
Adecuada para árboles y grafos Adecuada para procesos repetitivos simples
📌 Recuerda
Muchos algoritmos recursivos pueden implementarse también mediante bucles.

Caso práctico

Situación

Se desea recorrer todos los archivos contenidos en una carpeta y en todas sus subcarpetas.

Solución

La estrategia recursiva consiste en:

  1. Procesar la carpeta actual.
  2. Recorrer cada elemento.
  3. Si un elemento es una subcarpeta, volver a ejecutar el mismo algoritmo sobre ella.
  4. Finalizar cuando una carpeta no contenga más subcarpetas.
Carpeta

├── Archivo

├── Carpeta A

│   └── Archivo

└── Carpeta B

    └── Archivo
🎯 Muy preguntado
El recorrido recursivo de directorios es uno de los usos más habituales de esta técnica.

Ventajas e inconvenientes

Ventajas

  • Código limpio y fácil de mantener.
  • Muy útil para problemas jerárquicos.
  • Facilita algoritmos divide y vencerás.
  • Reduce la complejidad lógica de algunos problemas.

Inconvenientes

  • Mayor consumo de memoria.
  • Puede ser menos eficiente.
  • Riesgo de Stack Overflow.
  • Puede resultar difícil de depurar.

Errores habituales

⚠️ Error habitual
Los errores más frecuentes al estudiar recursividad son:
  • Olvidar definir el caso base.
  • No reducir el problema en cada llamada.
  • Confundir recursividad con iteración.
  • Pensar que siempre es más eficiente que un bucle.
  • Ignorar el consumo de memoria de la pila.

Cómo evitarlos

  • Comprobar siempre el caso base.
  • Verificar que cada llamada se aproxima al caso base.
  • Dibujar el árbol de llamadas para comprender la ejecución.
  • Analizar la profundidad máxima de la recursión.
  • Comparar la solución recursiva con su equivalente iterativo.

Relaciones con otros temas

La recursividad está estrechamente relacionada con:

  • Funciones.
  • Pila de llamadas (Call Stack).
  • Algoritmos.
  • Divide y vencerás.
  • Árboles.
  • Grafos.
  • Búsquedas.
  • Ordenación.
  • Complejidad algorítmica.
📌 Recuerda
En exámenes es muy frecuente relacionar la recursividad con factoriales, árboles, Call Stack, Stack Overflow y algoritmos divide y vencerás.

Conceptos clave para recordar

[!NOTE]

  • La recursividad consiste en que una función se llama a sí misma.
  • Toda función recursiva debe tener un caso base.
  • Cada llamada debe acercarse progresivamente al caso base.
  • Las llamadas se almacenan en la pila de llamadas (Call Stack).
  • Al alcanzarse el caso base, las funciones retornan en orden inverso.
  • La recursividad consume más memoria que la iteración.
  • Un exceso de llamadas puede producir un Stack Overflow.
  • Es especialmente útil para recorrer árboles, directorios, grafos y resolver algoritmos de divide y vencerás.
  • Muchos algoritmos recursivos pueden implementarse también mediante iteración.

📝 Preguntas de ejemplo

Comprueba si reconoces este tipo de preguntas.

1. ¿Qué es la recursividad en programación?
2. ¿Qué elemento es imprescindible en una función recursiva?
3. ¿Qué ocurre si una función recursiva no tiene caso base?
4. ¿Dónde se almacenan las llamadas recursivas durante su ejecución?
5. ¿Qué problema suele resolverse de forma natural mediante recursividad?

Preguntas frecuentes

¿Qué es la recursividad?

Es una técnica de programación en la que una función se llama a sí misma para resolver un problema dividiéndolo en subproblemas más pequeños.

¿Qué es el caso base?

Es la condición que detiene las llamadas recursivas e impide que la función se ejecute de forma indefinida.

¿Qué es el caso recursivo?

Es la parte de la función que realiza una nueva llamada a sí misma con un problema de menor tamaño hasta alcanzar el caso base.

¿Qué diferencia existe entre recursividad e iteración?

La recursividad resuelve un problema mediante llamadas sucesivas a la misma función, mientras que la iteración utiliza estructuras repetitivas como los bucles.

¿Cuándo es recomendable utilizar recursividad?

Cuando el problema puede dividirse de forma natural en subproblemas similares, como el recorrido de árboles, algoritmos de búsqueda o el cálculo de ciertas secuencias matemáticas.

¿Qué es la pila de llamadas (call stack)?

Es la estructura de memoria donde el sistema almacena la información de cada llamada a una función hasta que finaliza su ejecución.

¿Qué es un desbordamiento de pila (stack overflow)?

Es un error que ocurre cuando se realizan demasiadas llamadas recursivas sin alcanzar el caso base, agotando la memoria reservada para la pila de llamadas.

¿Qué ventajas tiene la recursividad?

Permite implementar soluciones más simples, claras y elegantes para determinados problemas, especialmente aquellos con estructura jerárquica o repetitiva.

¿Qué inconvenientes tiene la recursividad?

Puede consumir más memoria y tiempo de ejecución que una solución iterativa debido al uso de la pila de llamadas.

¿Qué suele preguntarse en el examen?

Las preguntas suelen centrarse en el caso base y el caso recursivo, las diferencias entre recursividad e iteración, el funcionamiento de la pila de llamadas y la identificación de funciones recursivas.


Temas relacionados

  • Funciones
  • Bucles
  • Pila (Stack)
  • Árboles
  • Algoritmos
  • Divide y vencerás

¿Has terminado de estudiar?

Ahora pon a prueba tus conocimientos realizando el test completo de este tema.

Comenzar test

Utilizamos cookies

Utilizamos cookies analíticas para conocer el uso de la plataforma y mejorar la experiencia del usuario. Puedes aceptar o rechazarlas en cualquier momento. Más información en nuestra Política de Cookies .