如何使用递归找到sin(x)的导数?

时间:2009-11-28 15:51:12

标签: c algorithm

我如何找到sin(x)的导数,其中x可以是任何值,例如1,2,3 使用递归

2 个答案:

答案 0 :(得分:8)

首先,sin(x)的导数是cos(x),或者更正式地说:

f(x) = sin(x)
f'(x) = cos(x)

我猜你可以使用Taylor series for cos(x)来解决sin(x):

cos(x) = 1 - x^2/2| + x^2/4! + ...

递归。在Java中:

public double cos(double x) {
  return 1 + next(-x*x/2, x, 3);
}

public double next(double term, double x, int i) {
  double next = -term * x * x / (i * (i + 1));
  return term + next(term, x, i + 2);
}

当然你需要设置一些限制器来退出递归,否则最终会出现堆栈溢出错误,这留给读者练习。

哦,我看到这个问题被标记为C而不是Java,但这是作业。 : - )

答案 1 :(得分:0)

我认为您需要查找您尝试使用的术语(派生和递归)。如果我读到这个问题,听起来你在问如何计算:

罪的衍生物(3)

罪的衍生物(2)

罪的衍生物(1)

对于x的所有值,答案为零,因此不能满足您的要求。作为起点的递归立即终止。

人们只能假设你想要评估sin(x)[期]的导数。这种计算与递归有什么关系尚不清楚。一种可能的解释是,您正在寻找正弦导数的数值近似,并希望递归地缩小计算斜率的间隔。

没有人能够很好地阅读你的思想来回答你的问题,所以现在是时候更准确地改写它了。也许例子或伪代码片段有助于更清楚地证明你的意图或问题。