3

我正在编写一个必须递归的正弦函数。我写了一个正弦函数,但不确定如何递归地执行它。有人可以解释如何开始这个吗?

这是我到目前为止所拥有的:

/*--------------------------------------------------------------
Name: sine( double X );

Return: Function "sine" will return the 
sine of X, where X is measured in radians.
--------------------------------------------------------------*/

double sine(double X)
{
  double result = 0;
  double term;
  int k;
  double lim;

  k = 0;
  lim = power(10, -8); 
  term = power(-1, k)*power(X, ((2*k) + 1)) / (factorial((2*k)+1));  
  result = term;
  while (absolute(term) > lim)  
  {
    k += 1;
    term = power(-1, k)*power(X, ((2*k) + 1)) / (factorial((2*k)+1));  
    result += term;
  }


  return result;
}

编辑:我使用包装函数来解决这个问题。基本上创建了另一个名为

double sine_rec(double X, double k)

并围绕当前代码进行更改以适应它。

4

2 回答 2

4

我接近这个的方法是有另一个函数sine(double X, int n),它接受另一个整数参数 - 幂级数近似中包含的项数。然后这个函数可以返回类似的东西[nth term in series] + sine(X, n - 1)(只要记住前面if处理 n = 1 的语句)。

于 2012-04-26T21:04:12.313 回答
0

while您可以通过以下方式通过递归消除循环:

double sine(double X, int k = 0)
{
  double result = 0;
  double term;
  double lim;

  lim = power(10, -8); 
  term = power(-1, k)*power(X, ((2*k) + 1)) / (factorial((2*k)+1));  
  if (absolute(term) > lim)  
  {
    return sine(X, k+1) + term; 
  }
  else
  {
    return term;
  }
}

但我完全不建议这样做。(即使是这种递归也有更好的解决方案,但请自行查找)

于 2012-04-26T21:03:21.637 回答