首页 > 试题广场 >

已知程序如下: int S(int n) { ...

[单选题]
已知程序如下:
int S(int n) {
    return (n<=0) ? 0 : s(n-1)+n;
}

void main() {
    cout<< S(1);
}
程序运行时使用栈来保存调用过程的信息,自栈底到栈顶保存的信息依次对应的是 ()

  • main()→S(1)→S(0)
  • S(0)→S(1)→main()
  • main()→S(0)→S(1)
  • S(1)→S(0)→main()
这题又是408的真题
发表于 2019-09-27 16:33:42 回复(2)
1.程序执行顺序main()->S(1)->S(2)。
2.函数在调用过程中PC(程序计数器)的操作是保护现场->将所有数据拷贝到栈->跳转到子函数
3.根据栈的数据结构的特点(首先栈的数据结构是处理函数调用这个情况最好的办法),先入后出,因此,栈底为main(),栈顶为S(1)
发表于 2021-12-17 09:39:00 回复(0)
c程序总是从main()函数开始的,然后就开始执行s(1),最后s(0),因为栈是先进后出,所以从栈底到栈顶就是mian()->s(1)->s(0)
发表于 2022-05-03 14:57:09 回复(0)
压栈过程(linux系统)高地址往低地址,从栈顶压入栈底,举例:数组内部就是栈空间,入栈从栈顶开始,就是下标为0的,压栈地址递减,下标加1,退栈往前覆盖前面的下标! 题目应该为windows系统,相反 main函数调用开始进入栈空间随后-s(1)-s(0)那么他的栈底就是main()到s(1)到s(0)栈顶
发表于 2023-02-09 00:02:43 回复(0)
S(0)的信息出栈,s(1)用, s(1)的信息出栈,给主函数用
发表于 2023-03-15 12:26:54 回复(0)
函数总是从main函数开始,而栈是先进后出的,有程序可看出s(1)虽然不是第一个得到结果的但是是第一个开始的;所以是s(1)→s(0)
发表于 2022-12-13 09:49:19 回复(0)
S(0)  从哪里来的?
发表于 2022-11-08 14:39:52 回复(1)
A
发表于 2022-09-26 20:31:54 回复(0)
这题咋做
发表于 2021-08-13 08:53:53 回复(0)