第 1 题
数据结构已知程序如下:
int S(int n)
{
return (n <= 0) ? 0 : S(n - 1) + n;
}
void main()
{
cout << S(1);
}
程序运行时使用栈来保存调用过程的信息,自栈底到栈顶保存的信息依次对应的是( )。
A. main()->S(1)->S(0)
B. S(0)->S(1)->main()
C. main()->S(0)->S(1)
D. S(1)->S(0)->main()
查看答案与解析
参考答案:A
答案:A。
基础概念。 函数每开始一次调用,就把这次调用的参数、返回位置等信息放入一个栈帧。调用栈是“后调用的在上面”,返回时也先处理最上面的调用。
跟踪程序。
- 首先执行 main,因此 main 的栈帧在栈底。
- main 调用 S(1),S(1) 的栈帧压在 main 上面。因为 ,还不能直接返回,需要计算 S(0)+1。
- S(1) 再调用 S(0),S(0) 的栈帧压到最上面。此时栈底到栈顶就是 main→S(1)→S(0)。
- S(0) 返回 0 后才依次结束 S(1) 和 main。题目问的是调用过程中保存的信息次序,而不是返回次序。
所以选 A。B 把栈顶到栈底当成了所问方向,C、D 则改变了实际调用的先后关系。









