Answer is (b) static variables.
(a) Local variables have lifetime only till function call completes execution and are popped off the stack once execution is completed.
(b) Since static variables preserve their value even after the function execution is done, they must not be present on execution stack. Contents of stack are emptied once the function returns and if static variables would be present in stack, then we would loose their value.
(c) In order to understand this, we can consider the following simple example:
factorial(n)
{
if(n==1) return 1;
else return n*factorial(n-1);
}
For each function call, the new value of parameter is pushed onto the stack and the return values are computed accordingly.
(d) We need return addresses to return the control so that execution can be resumed after the function call.