在循环内调用递归函数

时间:2012-05-06 16:29:05

标签: 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;
}

问题1:我对此计划的预期结果为24 24(两次24为打印机)但实际结果我只得到一个24

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

如果有人告诉我如何在循环中调用递归函数以获得多个输出,那就太棒了。

1 个答案:

答案 0 :(得分:11)

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(),则不应编译。