¿Qué imprime este código? ¿Cuál es la función de EOLN en este ejemplo?

Este programa imprime el reverso de una cadena que se ingresa.

La EOLN es ‘\ n’. Cuando alguien presiona la tecla ENTER, la función getchar devolverá una nueva línea (‘\ n’).

La función inversa se llama a sí misma hasta que el usuario no haya ingresado una EOLN. Cuando el usuario ha ingresado una nueva línea, imprime los caracteres ingresados ​​desde el final.

Editar:

Cada vez que una función llama a otra función o se llama a sí misma, la pila de variables asociadas con el contexto de la ejecución de la nueva función es nueva. Por lo tanto, cada vez que se hace una llamada inversa, se crea una nueva copia de la pila variable.

Consideremos que el usuario ingresa algo como

“Foobar” y presiona enter.

La ejecución procederá como

1) reverso:
c = ‘F’ (! = ‘\ n’)
2) reversa:
c = “o” (! = ‘\ n’)
3) reverso:
c = “o” (! = ‘\ n’)
4) reverso:
c = “b” (! = ‘\ n’)
5) reverso:
c = “a” (! = ‘\ n’)
6) reverso:
c = “r” (! = ‘\ n’)
7) reverso:
c = ‘\ n’
imprimir “\ n”
imprimir “r”
imprimir “a”
imprimir “b”
imprimir “o”
imprimir “o”
imprimir “F”

Entonces, si ve el orden en que se imprime, será en orden inverso.

podemos hacer esta simulación de una manera diferente

considere este pseudocódigo:

función inversa:
char c
apilar S
while (c = getchar ()! = “\ n”) {
S.push (c)
}
while (! S.empty ()) {
imprimir S.top ();
S.pop ()
}

Si ve, no hay una recursión involucrada pero produce el mismo resultado que el programa publicado. Todas las funciones recursivas se pueden traducir a tales iterativas utilizando una estructura de datos de pila. por ejemplo, DFS.

La llamada recursiva de la función inversa pone cada ‘char c’ en la pila.
Si sabe que la función recursiva funciona, sabrá que cada llamada recursiva tendrá su variable local c. Que al llamar a la función ‘inversa’ de forma recursiva colocará la variable ‘c’ en la pila y en el momento en que encontrará ‘\ n’ o un nuevo carácter de línea. Las llamadas recursivas finalizarán y la variable ‘c’ de cada llamada recursiva se desplegará y se imprimirá en la pantalla con ‘putchar (c)’.
Por lo tanto, su funcionamiento se define como último en entrar, primero en salir.