1. Definición Recursiva
Una definición recursiva describe un objeto (como una secuencia o estructura) en términos de versiones más pequeñas de sí mismo. Tiene dos componentes:
- Caso base: Define el valor inicial o condición de parada.
- Paso recursivo: Define cómo construir el siguiente elemento a partir de los anteriores.
Ejemplos Clásicos
- Números de Fibonacci :
- Caso base: , .
- Paso recursivo: para .
- Listas Enlazadas :
- Una lista enlazada es:
- Caso base: Vacía (null).
- Paso recursivo: Un nodo que contiene un valor y una referencia a otra lista enlazada.
- Una lista enlazada es:
- Árboles de Parse :
- Caso base: Un nodo hoja (un símbolo terminal).
- Paso recursivo: Un nodo interno con subárboles como hijos.
- Fractales :
- Ejemplo: El conjunto de Cantor.
- Caso base: Un segmento inicial.
- Paso recursivo: Dividir cada segmento en tres partes y eliminar la parte central.
- Ejemplo: El conjunto de Cantor.
1.1 Pruebas Inductivas
La inducción es una herramienta poderosa para probar propiedades de objetos definidos recursivamente.
Ejemplo: Probar una Propiedad de Fibonacci
Probar que para todo .
- Base de Inducción :
- Para : . Verdadero.
- Para : . Verdadero.
- Paso Inductivo :
- Supongamos que y para algún .
- Entonces:
- Por lo tanto, .
Conclusión:
1.2 Relaciones de Recurrencia
Una relación de recurrencia describe cómo calcular un término en función de términos previos.
Métodos de Solución
- Iteración : Expandir la recurrencia hasta encontrar un patrón.
- Fórmula cerrada : Resolver explícitamente para obtener una expresión no recursiva.
Ejemplo: Resolver con
- Expandir: Continuando:
- Simplificar: La suma es una serie geométrica: Por lo tanto:
Pasos para Analizar un Problema
- Identificar el caso base.
- Determinar cómo se construye el problema a partir de casos más pequeños.
- Escribir la relación de recurrencia.
Ejemplo: Torres de Hanoi
El problema consiste en mover n discos de una varilla a otra, siguiendo ciertas reglas.
- Caso base: (un solo disco requiere un movimiento).
- Paso recursivo: Para mover discos, primero mueve discos a una varilla auxiliar, luego mueve el disco más grande, y finalmente mueve los discos restantes.
1.3 Análisis de Código Recursivo/Iterativo
Dado un código recursivo, identifica su relación de recurrencia y prueba su forma cerrada. Ejemplo: Función Factorial
def factorial(n): # se define la funcion factorial con parametro n
if n == 0: # caso base: si f(0) entonces retorna 1
return 1
else: # Paso recursivo: si no es f(0) entonces f(n) = n * f(n-1) por ejemplo f(3)= 3 * f(3-1)
return n * factorial(n-1)
- Relación de Recurrencia:
- Caso base:
- Paso recursivo:
- Forma Cerrada:
- Hipótesis:
- Prueba por inducción:
-
Base: Verdadero.
-
Paso inductivo: Supongamos
-
Entonces:
-
Conclusión:
-