已知程序如下:
int S(int n) { return (n<=0)?0: S (n-1)+n; } void main( { cout<< S(1); }
程序运行时使用栈来保存调用过程的信息,自栈底到栈顶保存的信息依次对应的是 () 。
【解析】 函数 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)中,实际参数小于等于零,递归终止
递归调用函数时,在系统栈里保存的函数信息需满足先进后出的特点,依次调用了 main() 、 S(1) 、 S(0) ,故栈底到栈顶的信息依次是 main() 、 S(1) 、 S(0) 。 (来自王道论坛)