Cómo escribir una función recursiva usando Python que toma una cadena como entrada e imprime cada carácter en una línea separada

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

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.

Fácil.

Simplemente haga una función que tome una cadena como primer parámetro y luego haga un valor i opcional.

Convierta el parámetro en un str (solo por seguridad). Asegúrese de verificar si i es mayor que 0, pero menor que len () de la cadena.

Después de eso, imprime () el subíndice actual de la cadena. Luego, incremente el valor i.

Finalmente, llama a la misma función.

Spoiler, mi código está abajo.

def my_print (impresión, i = 1):
str (impresión)
si i> 0 e i imprimir (imprimir [i – 1])
i + = 1
my_print (impresión, i)

No estoy seguro de por qué quieres hacer esto usando la recursión, considerando que hay formas más fáciles de hacerlo, pero no obstante, aquí hay una solución:

def func (cadena):
print (cadena [0])
si len (cadena)> 1:
cadena = cadena [1:]
func (cadena)