第一次在这里发帖,我希望这个问题是可以接受的。
作为一个小测试,我编写了一个应用程序,它使用迭代和递归来计算一个数字的阶乘。这似乎工作正常,除非尝试计算大于 24 的数字的阶乘。
例如,在计算 24 的阶乘时,两种方法都给出了正确答案 62044840173323941。
然而,在计算 25 的阶乘时,答案会有所不同。递归方法给出的答案为 1.5511210043330986e+025,而迭代方法给出的答案为 1.5511210043330984e+025。
根据 Wolfram Alpha 的说法,正确答案应该与迭代方法相同,那么为什么函数之间会出现差异?我问了我的同事,他们也无法解释这种行为。
#define TEST_CASE 25
double GetFactorialRecursive(double i)
{
if (i == 1)
return i;
else
return i * GetFactorialRecursive(i - 1);
}
double GetFactorialIterative(double i)
{
double result = 1.0;
for (; i > 0; --i)
result *= i;
return result;
}
int main ()
{
double recres = 0, itrres = 0;
recres = GetFactorialRecursive(TEST_CASE);
itrres = GetFactorialIterative(TEST_CASE);
if (recres != itrres)
std::cout << "Error" << "\n";
std::cout << std::setprecision(25) << "Recursion: " << recres << ", Iteration: " << itrres << "\n";
return 0;
}
谢谢您的考虑。