【发布时间】:2013-03-30 04:29:44
【问题描述】:
第一次发帖,希望这个问题可以接受。
作为一个小测试,我编写了一个应用程序,它使用迭代和递归来计算一个数字的阶乘。这似乎工作正常,除非尝试计算大于 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;
}
感谢您的考虑。
【问题讨论】:
-
我自己试过了。同样的结果,还值得注意的是这两个数字仅相差一位:
Recursion: 15511210043330986055303168 [4529a940c33f6121]和Iteration: 15511210043330983907819520 [4529a940c33f6120]
标签: c++ recursion iteration factorial