在循环中调用递归函数

Calling recursive function inside a loop

本文关键字:递归函数 调用 循环      更新时间:2023-10-16

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

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 2424打印机的两倍),但实际结果我只得到了一个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()被递归调用。

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