程序帮助 - 解决e(n)

时间:2014-04-10 16:11:07

标签: c++ algorithm

我已经在这个问题上挣扎了一个星期,我只需要一些关于数学部分的指导。如果我能理解它背后的数学,我可以将这些功能拼凑起来以使其工作。作业是;


设计和开发用于在delta <= 0.000001 时计算e(n)的C ++程序

  • e(n-1)= 1 + 1/1! + 1/2! + 1/3! + 1/4! + ... + 1 /(n-1)!
  • e(n)= 1 + 1/1! + 1/2! + 1/3! + 1/4! + ... + 1 /(n)!

delta = e(n) - e(n-1)

您没有对该计划的任何输入。你的输出应该是这样的:

  • N = 2e(1)= 2e(2)=2.5δ= 0.5
  • N = 3e(2)= 2.5e(3)=2.565δ= 0.065 ...

您必须使用递归函数调用。


我的第一个问题是数学和包含它们的变量。

  • delta,e(n)和e(n-1)变量必须加倍
  • 如果e(n)= 1 + 1/1! = 2然后e(n-1)必须等于1,这意味着delta = 1(这是我的想法)我只是不确定第一次在.5 delta后面的数学和第二次迭代中的0.065。 / LI>

有人能指出我在这个问题上的正确方向吗?

谢谢,

Ť

2 个答案:

答案 0 :(得分:1)

wikipedia链接,您可以看到

enter image description here

我不会在这里解释限制的概念,但这基本上意味着,如果我们定义一个函数 e ,其中e(n) = 1 + 1/1! + 1/2! + 1/3! + 1/4! + … + 1/(n)!(这是你问题中给出的函数) ,我们能够近似常数 e 的实际值。 n 越高,我们越接近 e

如果你仔细观察这个函数,你会发现每次我们都添加一个小于前一个的术语:1 >= 1/1! >= 1/2! >= .... >= 1/(n)!

这基本上意味着,每当我们增加 n 时,我们就越接近 e ,但我们正在放慢速度。

e 的实际价值是2.71828 ......

  • 在我们的第一步e(1)= 1,我们是1.71828 ...离实际值太远
  • 在第二步e(2)= 2,我们在0.71828 ...,1距离更近
  • 在第三步e(3)= 2.5,我们现在在0.21828 ...,0.5距离更近

正如你所看到的,我们正在到达那里,但越接近,我们就越慢。现在让我们说在每一步,我们都想知道我们与之前的值相比有多接近。 然后我们只做e(n) - e(n-1)。这基本上是 delta 的含义。

在某些时候,我们的行动非常缓慢,以至于继续前行已经没有任何意义了。我们几乎待在这里。此时,我们认为我们的近似值与 e 足够接近。

在您的情况下,问题将最小进展速度定义为0.000001

答案 1 :(得分:0)

这是一个解决方案: -

delta = e(n) - e(n-1)
delta = 1/n!
delta < 0.000001
n! > 1000000
n >= 10  as 10! = 3628800