C 带和不带递归的序列

C 带和不带递归的序列,c,recursion,recurrence,C,Recursion,Recurrence,我有一个序列 a1 = 1 - cos(x); ai = a1 + (-1)^(i-1) * x^(2*i-2) / (2*i-2)! 我需要写这个,有递归和没有递归。但是它有不同的结果。 这是我的代码:我将在假设这是作业的情况下操作,如果我错了,我会回来编辑这篇文章或转发 首先,您应该尝试以尾部递归的方式编写阶乘函数。虽然这在C语言中可能不会有太大的区别,但这是一个很好的实践 int helper( int x, int acc ) { if( x == 0 ) {

我有一个序列

a1 = 1 - cos(x);
ai = a1 + (-1)^(i-1) * x^(2*i-2) / (2*i-2)!
我需要写这个,有递归和没有递归。但是它有不同的结果。

这是我的代码:

我将在假设这是作业的情况下操作,如果我错了,我会回来编辑这篇文章或转发

首先,您应该尝试以尾部递归的方式编写阶乘函数。虽然这在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;
欲了解更多信息,

看起来像是家庭作业。请把这个标签,如果真的,我想你的序列是要收敛到零。如果是这样的话,它应该被定义为a_i=a_(i-1)+…你是说
helper(x-1,acc*x)
<代码>阶乘,您定义它的方式,只需要一个参数。我做了,谢谢。我决定让助手成为助手,而不是中间的实际函数,但忘了修复它。