有一个经典的递归调用是求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!=”的输出再做计算?
函数调用前后执行的顺序是什么?
求大神说得浅显一些。
在函数体里面加输出是这样的
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)了:喔明白了。多谢多谢
本回答被提问者采纳