Recursión
Recursión es una técnica de programación donde una función se llama a sí misma para resolver un problema en partes más pequeñas. Es especialmente útil para problemas con estructura repetitiva o subproblemas naturales.
Los elementos clave de la recursión son:
Caso base: la condición que detiene la recursión;
Caso recursivo: la parte donde la función se llama a sí misma con una entrada más simple.
¿Por qué usar recursión?
Algunos problemas pueden expresarse naturalmente en términos de subproblemas más pequeños. La recursión proporciona una forma clara y elegante de resolverlos haciendo que una función se llame a sí misma para manejar los casos más simples. Es comúnmente utilizada en tareas como el procesamiento de árboles, la exploración de rutas o la descomposición de estructuras (por ejemplo, listas, cadenas).
def print_message(message, times): if times > 0: # Base case: stop when times is 0 print(message) print_message(message, times - 1) # Recursive case # Function call print_message("Hello, Recursion!", 3)
Analicemos paso a paso cómo funciona este programa recursivo:
Verificación de condición: si
times > 0
, la función continúa. En este caso,times = 3
, por lo que la condición es verdadera;Impresión del mensaje: la función imprime
"Hello, Recursion!"
;Llamada recursiva: la función se llama a sí misma con
times - 1
;Repetición: este proceso continúa hasta que
times
es igual a 0;Finalización: cuando la condición
times > 0
ya no es verdadera, la recursión se detiene y el programa finaliza.
Resultado: El mensaje "Hello, Recursion!"
se imprime tres veces.
Comprensión del flujo:
Cada vez que la función se llama a sí misma, agrega un nuevo marco a la pila de llamadas (una estructura de memoria que rastrea las llamadas de función activas). La función sigue llamándose a sí misma con un valor de times
menor. Una vez que alcanza el caso base (times == 0
), se detiene. Luego, cada llamada previa se completa una por una en orden inverso. Este comportamiento de retroceso es esencial para el funcionamiento de la recursión.
Swipe to start coding
Dada una cadena que representa un número de teléfono, la cual puede contener espacios, guiones, paréntesis u otros caracteres no numéricos. El objetivo es extraer únicamente los dígitos utilizando recursividad.
- Si la cadena de entrada
number
está vacía, devolver una cadena vacía. - Comprobar si el primer carácter de la cadena
number
es un dígito utilizando el métodoisdigit()
en una condiciónif
. - Si es un dígito, concatenarlo con el resultado de una llamada recursiva a
format_phone_number
, pasando la subcadena que comienza desde el segundo carácter. - Si no es un dígito, realizar una llamada recursiva a
format_phone_number
, omitiendo el primer carácter.
Solución
¡Gracias por tus comentarios!