这道题考察的是递归函数的调用栈过程。
逐步分析程序的执行过程:
main()
函数首先被调用,此时栈底是main()
的信息。main()
函数调用S(1)
,此时S(1)
的信息被压入栈中,位于main()
之上。S(1)
函数内部调用S(0)
,因为n
不等于 0,所以S(1)
会递归调用S(0)
。此时S(0)
的信息被压入栈中,位于S(1)
之上。
此时栈的状态是:
- 栈底:
main()
- 中间:
S(1)
- 栈顶:
S(0)
因此,选项 A main()->S(1)->S(0)
是正确的。
继续分析剩余的执行过程:
S(0)
执行完毕,返回值 0,此时S(0)
的信息从栈中弹出。S(1)
接收到S(0)
的返回值,计算S(1) = S(0) + 1 = 0 + 1 = 1
,然后S(1)
的信息从栈中弹出。main()
接收到S(1)
的返回值,输出结果 1,然后main()
的信息从栈中弹出。
最终,栈被清空,程序执行结束。