这是我的代码:
#include<iostream>
int x;
void gad(int x)
{
if(x==0)
return;
else{
std::cout<<"geek"<<" ";
std::cout<<"for geeks ";
gad(x-1);
}
}
int main()
{
gad(3);
return 0;
}输出如下
geek for geeks geek for geeks geek for geeks
现在,如果将第二个std::cout的位置从
std::cout<<"geek"<<" ";
std::cout<<"for geeks ";
gad(x-1);至
std::cout<<"geek"<<" ";
gad(x-1);
std::cout<<"for geeks ";输出的结果如下
geek geek geek for geeks for geeks for geeks
我的问题是为什么改变std::cout 的位置会这样改变输出?
我想如果我把cout放在函数的后面,由于递归,它不会给出“geek”,也不会因为if语句而从递归循环中出来。
发布于 2020-09-04 18:57:28
您正在打印第一句,然后对同一个函数进行递归调用,作为回报,该函数将打印第一句并转到另一个递归call...etc。在最后一个函数返回后,它将继续使用x=1打印第二个sentence...etc。要可视化所发生的事情,这将是调用堆栈:
x=3 ->打印第一条语句
x=2 ->打印第一条语句
x=1 ->打印第一条语句
x=0 ->返回
x=1 ->继续打印第二条语句并终止
x=2 ->继续打印第二条语句并终止
x=3 ->继续打印第二条语句并终止
发布于 2020-09-04 18:58:00
在第一种情况下,在进行递归调用之前,将两者都打印出来。而在第二种情况下,您首先打印“极客”,然后进行递归调用,这再次打印‘极客’等等,直到它返回null,然后打印“for geek”,因为它是递归调用之后的下一个语句。
https://stackoverflow.com/questions/63746597
复制相似问题