我有一个序列。

a1 = 1 - cos(x);
ai = a1 + (-1)^(i-1) * x^(2*i-2) / (2*i-2)!

我需要有和没有递归写此。但它有一个不同的结果。结果 这是我的代码: http://codepaste.net/q213q6

有帮助吗?

解决方案

我会假设这是家庭作业,如果我错了,我会回来和编辑这篇文章或转贴下工作。

首先,你应该尝试写你的阶乘函数在尾递归的方式。虽然它可能不会让用C太大的差别,这是很好的做法。

int helper( int x, int acc ) {
    if( x == 0 ) {
        return acc;
    }
    else {
      return helper( x - 1, acc * x );
    }
}

int factorial( x ) {
  helper( x, 1 );
}

接下来,你一般不希望把一个循环的递归函数,这有点违背了点内。想想一个递归调用作为一个迭代与测试,要么退货或召回。

其他提示

由于正在执行浮点运算。实施方式不同,产生不同的结果。 你的情况我能想到一个地方,损失发生的

currC = pow(x, 2*i-2);

不等于

  47:          currC = currC * x * x;

有关的更多信息, http://en.wikipedia.org/wiki/Floating_point#Multiplication

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top