c++递归函数运行顺序?菜鸟一只,求教。

有一个经典的递归调用是求n的阶乘。在函数体里面加上输出语句就可以看出运行顺序:
int f (int x)
{if ((x==0)||(x==1))
return 1;
return x*f(x-1);

然后在主函数中调用:
cout <<“\n4!=”<<f(4)<<"\n3!="<<f(3)<<endl;
大约会这样输出
3 2 1 1 2 6 4 3 2 1 1 2 6 24
4!=24
3!=6
请问,为什么f(3)先计算,f(4)后计算?
为什么不先执行“4!=”的输出再做计算?
函数调用前后执行的顺序是什么?
求大神说得浅显一些。

第1个回答  推荐于2016-11-21
小兄弟 你不要骗我 就你给出的代码 怎么可能输出:3 2 1 1 2 6 4 3 2 1 1 2 6 24。。。追问

在函数体里面加输出是这样的
cout<< x<<'\t' ;
int y;
if((x==0)||(x==1))
y=1;
else y=x*f(x-1)
cout<<y<<'\t';
return y;
抱歉没说清楚,这是函数体。再看一下

追答

cout输出流的参数入栈的顺序是从右到左,出栈是从左到右。

所以f(3)先执行,f(4)后执行。

追问

不太懂入栈出栈,能不能用别的方式讲?我真的很外行啊

追答

那你就理解成:

在同一个cout语句里,如果有逻辑运算的话是右边的先执行,但是输出的话是从左边输出到右边。

//如果你这么写,就会是先执行f(4)了:
cout <<"\n4!="<<f(4)<<endl;
cout<<"\n3!="<<f(3)<<endl;

追问

喔明白了。多谢多谢

本回答被提问者采纳
相似回答