当我在循环中调用递归函数时,我遇到了两个问题。请考虑以下示例代码:
int fact(int x)
{
if(x == 1)
return 1;
return x*fact(x-1);
}
int main() {
int n = 2;
for(int i = 0; i < n; i++);
std::cout << fact(4) << std::endl; // 24 ??
return 0;
}
问题1:我对这个程序的预期结果是24 24
(两次24
是打印机)但实际结果我只得到一个24
。
问题2:重复调用main()
函数的原因是什么,即使我不是递归调用main函数。
如果有人告诉我如何在循环内调用递归函数获取多个输出,那就太棒了。
for(int i=0; i < n; i++); <---------------------- notice this
std::cout << fact(4) << std::endl; // 24 ??
请注意;
循环后的for
。这就是为什么你只得到一个输出。循环退出后执行std::cout
;它在循环之外。
这是你第一个问题的答案。现在第二个问题:
main()函数重复调用的原因是什么,即使我没有递归地称为main函数。
我不认为你发布的代码有这个问题。您必须在未发布的代码中执行其他操作,因为main()
将以递归方式调用。
请注意,C ++语言规范禁止从代码中调用main()
(递归或其他方式)。因此,如果你使用带有GCC的-pedantic
选项编译它,那么如果你偶然从你的程序中调用main()
它就不应该编译。