递归指在一个函数、过程或数据结构的定义中应用到了它自身。递归的精髓在于能否将原始问题转换为属性相同但规模较小的问题。
下面的代码最后会返回4。(f(0)=2,f(1)=1*f(0) = 2, f(2)=2*f(1) = 4)
if f(int x){
return ((x>0)? x*f(x-1):2); //条件表达式
}
int i;
i = f(f(1));
//if (x>0) return x*f(x-1);
//else return 2;
已知程序如下:
int S(int n)
{return (n<=0)?0:S(n-1)+n;}
voidSmain()
{cout<<S(1);}
程序运行时使用栈来保存调用过程的信息,自栈底到栈顶保存的信息一次对应的是(A)
A.main()->S(1)->S(0) B.S(0)->S(1)->main()
C. main()->S(0)->S(1) D.S(1)->S(0)->main()
解析:递归调用函数时,在系统栈里保存的信息需满足先进后出的特点。依次调用了main()、S(1)、S(0)。入栈顺序,栈底到栈顶信息都是main()->S(1)->S(0) 。