PUERTA | PUERTA CS 2008 | Pregunta 54

¿Cuál de lo siguiente es cierto?

I. A programming language which does not permit global variables of any
   kind and has no nesting of procedures/functions, but permits recursion 
   can be implemented with static storage allocation
II. Multi-level access link (or display) arrangement is needed to arrange 
    activation records only if the programming language being implemented 
    has nesting of procedures/functions
III. Recursion in programming languages cannot be implemented with dynamic 
     storage allocation
IV. Nesting of procedures/functions and recursion require a dynamic heap 
    allocation scheme and cannot be implemented with a stack-based allocation
    scheme for activation records
V. Programming languages which permit a function to return a function as its 
   result cannot be implemented with a stack-based storage allocation scheme 
   for activation records

(A) Solo II y V
(B) Solo I, III y IV
(C) Solo I, II y V
(D) Solo II, III y V

Respuesta: (A)
Explicación: I. La recursividad no se puede implementar con almacenamiento estático Asignación. La asignación estática significa que el compilador tiene que decidir el tamaño de las llamadas a funciones. En caso de recursión, no es posible que el compilador decida, ya que la profundidad de la recursión depende del parámetro de recursión, que también puede ser una entrada del usuario.

II. Es correcto. Los lenguajes de programación que admiten subrutinas anidadas también tienen un campo en el marco de llamada que apunta al marco de pila de la última activación del procedimiento que encapsula más de cerca al destinatario, es decir, el alcance inmediato del destinatario. Esto se llama enlace de acceso o enlace estático.(ya que realiza un seguimiento del anidamiento estático durante las llamadas dinámicas y recursivas) y proporciona acceso a la rutina (así como a cualquier otra rutina que pueda invocar) a los datos locales de sus rutinas de encapsulación en cada nivel de anidamiento. Algunas arquitecturas, compiladores o casos de optimización almacenan un enlace para cada nivel envolvente (no solo el envolvente inmediato), de modo que las rutinas profundamente anidadas que acceden a datos superficiales no tienen que atravesar varios enlaces; esta estrategia a menudo se denomina «pantalla» [Fuente:  https://en.wikipedia.org/wiki/Call_stack ]

tercero La recursividad PUEDE  implementarse con cualquier tipo de esquema de asignación dinámica de almacenamiento.

IV. Las funciones de anidamiento siempre se implementan en un idioma que usa STACK y NO Heap. (Ver arriba el punto II para más detalles)

V. ES CORRECTO. En el esquema de asignación basado en pila, una vez que una función ha regresado, se elimina de la pila de llamadas de función. Por lo tanto, devolver una función desde una función no parece posible.
Cuestionario de esta pregunta

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *