The answer is II and V only.
I. False. Recursion can be implemented with static storage allocation, but it requires careful management of the stack to ensure that the recursive calls don't overflow the available memory.
II. True. Multi-level access links are used to keep track of the activation records of nested procedures/functions. This allows the compiler to access variables and parameters from different levels of nesting.
III. False. Recursion can be implemented with dynamic storage allocation. In fact, this is the most common approach, as it allows for more flexibility in terms of memory usage.
IV. False. Nesting procedures/functions and recursion can be implemented with a stack-based allocation scheme for activation records. The stack is a LIFO (last-in, first-out) data structure that is well-suited for managing function calls and returns.
V. True. Functions that return functions as their results require a dynamic allocation scheme, as the lifetime of the returned function is not known at compile time. This cannot be implemented with a stack-based allocation scheme, as the stack is only used for storing local variables and function parameters.