首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么当我在减少我的功能后改变cout位置时输出会改变?

为什么当我在减少我的功能后改变cout位置时输出会改变?
EN

Stack Overflow用户
提问于 2020-09-04 18:49:53
回答 2查看 183关注 0票数 0

这是我的代码:

代码语言:javascript
复制
#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的位置从

代码语言:javascript
复制
std::cout<<"geek"<<" ";
  std::cout<<"for geeks ";

   gad(x-1);

代码语言:javascript
复制
   std::cout<<"geek"<<" ";
   gad(x-1);
   std::cout<<"for geeks ";

输出的结果如下

geek geek geek for geeks for geeks for geeks

我的问题是为什么改变std::cout 的位置会这样改变输出?

我想如果我把cout放在函数的后面,由于递归,它不会给出“geek”,也不会因为if语句而从递归循环中出来。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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 ->继续打印第二条语句并终止

票数 1
EN

Stack Overflow用户

发布于 2020-09-04 18:58:00

在第一种情况下,在进行递归调用之前,将两者都打印出来。而在第二种情况下,您首先打印“极客”,然后进行递归调用,这再次打印‘极客’等等,直到它返回null,然后打印“for geek”,因为它是递归调用之后的下一个语句。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63746597

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档