这里有两个不同的代码:
主要功能:
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()?
答案 0 :(得分:1)
这两个代码片段之间的区别在于,在第一个代码函数main中获取控件,并且除了早午餐语句之外,其顺序执行顺序执行。所以当声明时
int i=3+gets();
获取控制函数gets()被调用。
在第二个代码段声明中
int i=fact(n/2);
在函数fact()获得控件之前,不会执行。如果你要编写例如
,你可以达到同样的效果int main()
{
int i= fact( 10 );
return 0;
}
在这种情况下,将调用函数事实并执行其正文。
如果你要定义一个在任何函数之外的全局变量,并且这个全局变量将包含一个调用函数fact()的初始化器,也可以调用函数fact()。例如
int j = fact( 10 );
int main()
{
int i=3+gets(); //it calls gets() and store value in i//
return 0;
}
答案 1 :(得分:0)
gets()
,它会在执行到达时被调用。在您的代码中,这意味着它将立即被调用,因为它是main
中的第一个操作。
在fact
函数中,如果if(n==0)
条件为false,则只会进行递归调用。
顺便说一句,假设fact
你的意思是阶乘,那么你的功能是不正确的。它应该是这样的:
int fact(int n)
{
if(n == 0)
{
return 1;
}
else
{
return n * fact(n - 1);
}
}
答案 2 :(得分:0)
gets()是C ++中的库函数,它从标准输入读取字符并将它们作为C字符串存储到字符串中,直到到达换行符或文件结尾。
请你明白你对“初始化时间”的意图,你的意思是初始化程序或main()函数的时间吗?