C++ 递归与函数调用

C++ 递归与函数调用,c++,c,recursion,C++,C,Recursion,以下是两种不同的代码: 主要功能: int main() { int i=3+gets(); //it calls gets() and store value in i// return 0; } int fact(n) { if(n==0) return 1; int i=fact(n/2); //Why fact() is not called here// return i; } 递归函数: int main() { int i=3+gets();

以下是两种不同的代码:

主要功能:

int main()
{
  int i=3+gets();   //it calls gets() and store value in i//
  return 0;
}
int fact(n)
{
  if(n==0)
  return 1;
  int i=fact(n/2);   //Why fact() is not called here//
  return i;
}
递归函数:

int main()
{
  int i=3+gets();   //it calls gets() and store value in i//
  return 0;
}
int fact(n)
{
  if(n==0)
  return 1;
  int i=fact(n/2);   //Why fact() is not called here//
  return i;
}
我的问题是:

为什么在初始化时不调用fact(),而在main()中调用gets()?

gets()
在任何“初始化”过程中都不会调用它,而是在执行到达它时调用它。在您的代码中,这意味着它将被立即调用,因为这是
main
中的第一个操作

fact
函数中,只有当
if(n==0)
条件为false时,才能进行递归调用

顺便说一下,假设你所说的事实是阶乘,那么你的函数是不正确的。应该是这样的:

int fact(int n)
{
  if(n == 0)
  {
    return 1;
  }
  else
  {
    return n * fact(n - 1);
  }
}

GETSH()是C++中的库函数,它从标准输入中读取字符并将它们作为C字符串存储到字符串中,直到达到换行符或文件结束。


请您明确一下“初始化时间”的含义,您指的是程序或main()函数的初始化时间?

这两个代码段之间的区别在于,在第一个代码段中,main函数获取控件,其stetemnet除brunch语句外按顺序执行。那么什么时候发表声明呢

int i=3+gets();   
int i=fact(n/2);   
获取调用的控件函数get()

在第二个代码段语句中

int i=3+gets();   
int i=fact(n/2);   
在函数fact()获得控件之前不会执行。如果你写一个例子,你可以达到同样的效果

int main()
{
  int i= fact( 10 );
  return 0;
}
int j = fact( 10 );

int main()
{
  int i=3+gets();   //it calls gets() and store value in i//
  return 0;
}
在这种情况下,将调用函数fact并执行其主体

如果要定义任何函数之外的全局变量,并且此全局变量将包含调用函数fact()的初始值设定项,则也可以调用函数fact()。比如说

int main()
{
  int i= fact( 10 );
  return 0;
}
int j = fact( 10 );

int main()
{
  int i=3+gets();   //it calls gets() and store value in i//
  return 0;
}

这真的不是很清楚。在这两种情况下,函数都是在执行到达相关行时调用的。gets()body在哪里?什么是“初始化时不调用”的意思?我猜您忘记了在程序运行时执行的唯一函数是函数
main()
。在您的例子中,它调用函数
get()
,但不调用函数
fact()
get
是与
fact
不同的函数,当您希望代码执行
get
所做的任何操作时,可以调用它。与
事实
相同,除了做它自己称为有限次数的事情之外。lol,它不是阶乘:)通过递归计算阶乘对于计算阶乘来说是个坏例子,但是对于解释递归来说是个好例子(流行)。第一个条件可能是n@alexolut-我知道,我只是想在没有太多改动的情况下充实他的代码。这应该是一个评论,而不是回答。很抱歉,我刚刚加入,还没有赢得评论的声誉。还有函数事实()如果要定义任何函数外部的全局变量,并且此全局变量将包含调用函数fact()的初始值设定项,则可以调用。例如
intj=fact(10):初始值设定项元素不是编译时常量@BLUEPIXY,还有什么?!它是C++。应该是C++的注释,如果它?我不明白你在说什么about@VladfromMoscow
int j=fact(10)中存在错误如果是C代码。既然问题被标记为C和C++,那么注意到你的代码只是C++。尽管如此,我认为没有理由否决你的答案。