以下哪些陈述是正确的?
1) Static allocation of all data areas by a compiler
makes it impossible to implement recursion.
2) Automatic garbage collection is essential
to implement recursion.
3) Dynamic allocation of activation records is
essential to implement recursion.
4) Both heap and stack are essential to implement
recursion.
(A)仅 1 和 2
(B)仅 2 和 3
(C)仅 3 和 4
(D)仅 1 和 3答案: (D)
说明: 1)编译器对所有数据区的静态分配使得无法实现递归。
确实,函数调用堆栈需要动态分配内存,因为递归函数的调用次数未知。
2)自动垃圾收集对于实现递归是必不可少的。
错误,自动垃圾收集不是必需的。
3) 活动记录的动态分配对于实现递归是必不可少的。
确实,因为递归函数的调用数或激活记录数是未知的。
4) 堆和栈对于实现递归都是必不可少的。
函数调用不需要堆。它通常用于用户(或程序员)动态分配内存。
有关详细信息,请参阅 C 程序的内存布局。
这个问题的测验