在循环内调用递归函数

Sri*_*tha 2 c++ recursion

当我在循环中调用递归函数时,我遇到了两个问题.请考虑以下示例代码:

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;
}
Run Code Online (Sandbox Code Playgroud)

问题1:我对这个程序的预期结果是24 24(两次24是打印机),但实际结果我只有一个24.

问题2:main()重复调用函数的原因是什么,即使我不是递归调用main函数.

如果有人告诉我如何在循环内调用递归函数获取多个输出,我会很高兴.

Naw*_*waz 12

for(int i=0; i < n; i++); <---------------------- notice this
       std::cout << fact(4) << std::endl; // 24 ??
Run Code Online (Sandbox Code Playgroud)

注意;for循环.这就是为什么你只得到一个输出.的std::cout是在退出循环之后执行; 它在循环之外.

这是你第一个问题的答案.现在第二个问题:

main()函数重复调用的原因是什么,即使我没有递归地称为main函数.

我不认为你发布的代码有这个问题.您必须在未发布的代码中执行其他操作,因为这main()会以递归方式调用.

请注意,C++语言规范禁止main()您的代码(递归或其他方式)调用.因此,如果您使用GCC选项进行编译,那么如果您偶然从您的程序调用它,则不应编译.-pedanticmain()