¿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