0

我有一个序列。

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

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

4

2 回答 2

1

我将在假设这是家庭作业的情况下进行操作,如果我错了,我会回来编辑这篇文章或重新发布。

首先,您应该尝试以尾递归方式编写阶乘函数。尽管它在 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 );
}

接下来,您通常不希望在递归函数中放置一个循环,这在某种程度上违背了这一点。将递归调用视为带有测试和返回或召回的一次迭代。

于 2010-03-11T17:36:46.377 回答
0

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

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

不等于

  47:          currC = currC * x * x;

欲了解更多信息, http ://en.wikipedia.org/wiki/Floating_point#Multiplication

于 2010-03-11T17:48:04.193 回答