递归正弦函数

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)

并且改变了当前的代码以适应此需求。


2
这是作业吗?如果是的话,我宁愿给你一个提示而不是完整的答案,以免破坏你的乐趣。 - Mads
@Mads 它有一个作业标签...可能刚刚添加的? - kenny
你试过谷歌搜索吗?似乎有很多相关的例子。 - Paula Bean
2个回答

4
我会这样处理:创建另外一个函数sine(double X, int n),该函数需要另一个整数参数-在幂级数近似中包括的项数。然后,该函数可以返回类似于[系列中的第n个项] + sine(X, n - 1)的内容(只需记住先前的if语句来处理n = 1的情况)。

我认为这就是我所做的。我使用了一个包装函数。 - ArtisanSamosa

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;
  }
}

但我绝对不建议这样做。(即使是对于这个递归问题,还有更好的解决方案,但请自行发现)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接