我正在写一个必须递归的正弦函数。我写了一个正弦函数,但我不确定如何递归。有人可以解释如何开始这个吗?
这是我到目前为止所做的:
/*--------------------------------------------------------------
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)
并更改当前代码以适应该目标。
答案 0 :(得分:4)
我接近这个的方法是让另一个函数sine(double X, int n)
采用另一个整数参数 - 要包括在幂级数近似中的项数。然后这个函数可以返回[nth term in series] + sine(X, n - 1)
之类的东西(只记得先前的if
语句来处理n = 1)。
答案 1 :(得分: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;
}
}
但我不建议这样做。 (甚至对于这种递归也有更好的解决方案,但是可以自己找到它们)