我有一个序列。
a1 = 1 - cos(x);
ai = a1 + (-1)^(i-1) * x^(2*i-2) / (2*i-2)!
我需要在有和没有递归的情况下写这个。但它有不同的结果 这是我的代码:http://codepaste.net/q213q6
答案 0 :(得分: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 );
}
接下来,您通常不希望在递归函数中放置一个循环,这有点失败。将递归调用视为一次迭代,带有测试并返回或调用。
答案 1 :(得分:0)
因为您正在执行浮点运算。不同的实施方式可以产生不同的结果。 在你的情况下,我可以想到一个地方发生损失
currC = pow(x, 2*i-2);
不等于
47: currC = currC * x * x;
欲了解更多信息, http://en.wikipedia.org/wiki/Floating_point#Multiplication