No dijiste por qué quieres hacer esto. Algunas implementaciones de lenguaje optimizan la recursividad de cola para que pueda hacer iteraciones usando la recursión sin mucha penalización. Ese no es el caso para las implementaciones actuales de Python, por lo que si usa la recursión para implementar la iteración (un bucle simple), estará engullendo espacio de pila. Los intérpretes típicos de Python tienen un límite sorprendentemente bajo sobre qué tan profundo se le permite recurrir. Por lo tanto, no tomará una cadena muy larga para que una versión recursiva de este programa golpee su cabeza y se bloquee si le da una cadena larga (por ejemplo, una cadena de 1001 caracteres podría ser más de lo que sería una versión recursiva de la rutina feliz de manejar en Python.
Es trivial escribir un bucle en Python para hacer lo que describe:
>>> cadena = “foobarbaz”
>>> para ch en cadena:
… imprimir (ch)
…
F
o
o
si
una
r
si
una
z
- Cuando quitamos un borde de un árbol, parece obvio que nos quedan dos árboles, pero ¿cómo podríamos probar esto?
- ¿Qué métodos matemáticos se utilizan para rastrear el efecto de mercado de los algoritmos comerciales de alta frecuencia?
- ¿Qué estructura de datos debo usar si estoy diseñando un algoritmo que clasifica las páginas por relevancia de acuerdo con la cantidad de veces que se ven?
- ¿Existe un algoritmo para contar el número de subsecuencias divisibles por 8?
- Cómo entender algoritmos complejos de aprendizaje automático
El bucle “for” de Python sabe cómo iterar sobre los caracteres de una cadena al tratar la cadena como una lista de caracteres. Un caso bastante común, que el lenguaje hace exactamente el desgarro de la cadena que aparentemente desea. Y funcionará felizmente incluso con cadenas largas, siempre que sean lo suficientemente cortas como para caber en la memoria disponible.
Pero esa es una solución iterativa, no recursiva.
Si desea leer más sobre la recursividad, vea Recursión. Es una breve publicación de blog, pero tiene enlaces a algunas buenas lecturas adicionales sobre el tema.
Pero después de haberle dicho por qué probablemente no quiera hacerlo con recursividad, todavía me siento obligado a mostrarle una solución recursiva.
def primero (str):
si len (str) == 0:
regreso
print (str [0])
primeros (str [1:])
cadena = “foobarbaz”
primeros (cadena)
y una prueba de funcionamiento:
$ python3 firsts.py
F
o
o
si
una
r
si
una
z
La función “primeros” recibe una cadena. Si no hay caracteres en la cadena, ese es el caso base y simplemente regresa sin nada que hacer. De lo contrario, imprime el primer carácter de la cadena e invoca recursivamente los primeros en la subcadena de la cadena actual, excluyendo el primer carácter. Dado que la subcadena es más corta que la cadena actual, podemos estar seguros de que la recursión está progresando hacia el caso base (siempre que no nos quedemos sin espacio de pila o lleguemos al límite de profundidad de recursión). firsts es un ejemplo de recursión de cola.
Su “especificación” no dijo en qué orden deberían aparecer los caracteres en la salida, por lo que consideré darle una recursión más interesante que seleccionó el carácter del medio de la cadena, pero le dejaré ese problema a usted.