首页 > 解决方案 > 当我们将递归函数作为参数传递给函数本身时,在 C++ 中会发生什么?

问题描述

在下面的代码中,如果我使用 just factorial(n),它会给出正确的输出(120),但是当我使用 时factorial(factorial(n)),结果是 0。有人可以解释一下出了什么问题吗?

int factorial(int);

int main()  
{  
    int n = 5; // number of terms

    cout<<endl<<"The factorial is:"<<factorial(factorial(n));
    return 0;
}

int factorial(int x)
{
    if(x==1)
       return 1;
    else
        return x * factorial(x-1);
}

标签: c++recursion

解决方案


您的问题是您遇到了integer overflow

正如您所指出的,5 的阶乘是 120。

所以factorial(factorial(5))是一样的factorial(120)。如您所见,您没有将factorial函数作为参数传递给 external factorial。您将调用结果传递给内部阶乘作为外部阶乘的参数。代码等价于:

int result = factorial(5); // result = 120
factorial(result); // factorial (120)

问题是120的阶乘是一个非常的数字,几乎有200位数字。

现在这比int罐头存储的要大得多。甚至一个long long unsigned int. 您需要专门的库来处理任意大的数字。


推荐阅读