首页 > 试题广场 >

程序运行时使用栈来保存调用过程的信息,自栈底到栈顶保存的信息

[单选题]

已知程序如下:

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()
推荐

递归调用函数时,在系统栈里保存的函数信息需满足先进后出的特点,依次调用了 main() S(1) S(0) ,故栈底到栈顶的信息依次是 main() S(1) S(0) 。 (来自王道论坛)

编辑于 2016-12-01 12:00:47 回复(0)

【解析】 函数 S int n )是一个递归函数 ①当实际参数小于等于零时则返回 0 , 并终止递归 ②当实际参数大于零时则递归调用 S n-l 并将 S n-1 )的结果加上 n 作为返回值。程序从main()函数开始,首先调用main()函数;在main()函数中调用S(1)函数时,将函数的上下文保存到栈中,并进入函数S(1);由于函数S(1)的实际参数大于零,需要调用S(0),故将S(1)函数的上下文保存到栈中,进入S(0);在S(0)中,实际参数小于等于零,递归终止 

发表于 2017-04-06 11:52:04 回复(0)
对于条件表达式b?x:y,先计算条件b,然后进行判断。如果b的值为true,计算x的值,运算结果为x的值;否则,计算y的值,运算结果为y的值。
发表于 2017-02-20 23:40:00 回复(0)
递归调用函数时,在系统栈里保存的函数信息需满足先进后出的特点,依次调用了   main()   S(1)     S(0)   ,故栈底到栈顶的信息依次是   main()     S(1)     S(0)  
发表于 2016-12-13 18:20:28 回复(0)
main()、s(1)、s(0)
发表于 2017-02-12 15:22:07 回复(0)

函数调用的顺序为:main(),S(1),S(0),而函数调用的信息是存放在栈中的,栈是一种后进先出的数据结构,因此,自栈底到栈顶保存的信息依次对应的是main(),S(1),S(0)。选A。(话说main函数返回值为void在C++中真的没问题吗?)

编辑于 2020-08-05 09:00:40 回复(0)
最先调用的是main函数,然后是s(1),最后是s(0)
发表于 2019-05-31 16:36:05 回复(0)
A 递归计算的思想
发表于 2018-06-22 17:05:18 回复(0)
A递归计算
发表于 2018-04-27 15:56:01 回复(0)
栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算,这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
编辑于 2018-04-13 17:02:03 回复(0)
最先调用的是主函数main(),所以在栈底
发表于 2017-06-21 20:58:15 回复(0)
首先执行主函数,再执行函数调用,s(1),s(0)
发表于 2016-11-26 11:41:41 回复(0)