My text (Computer Organization and Embedded Systems, 6e, by Hamacher et al.) poses the following:
Consider the following possibilities for saving the return address of a subroutine:
(a) In a processor register
(b) In a memory location associated with the call, so that a different location is used when the subroutine is called from different places
(c) On a stack
and says that the answer options are:
(a) Neither nesting nor recursion are supported.
(b) Nesting is supported, because different Call instructions will save the return address at different memory locations. Recursion is not supported.
(c) Both nesting and recursion are supported.
I cannot understand the comment regarding (b).
Suppose our solution was (a).
This works for a case where we go "one level deep" but if we nest or recurse then everything except the very last calling function will have the correct returning address clobbered. No problem.
But what of (b)? Is the proposition that every subroutine call would cause the address of the next instruction after the call to be stored somewhere which is a (injective) function of the memory address of the call? If so, where does the problem arise with recursion? I think maybe I'm not getting my arms around even what we're talking about when we say "memory location associated with the call".