5

我正在尝试使用递归计算 e^x,e^x = e^(x/2)*e^(x/2),以及 e^x 的三阶麦克劳林展开式,并且脚本不断返回 1。我'不是在寻找更高精度的解决方案,只是为了了解脚本出错的地方:)

我的想法是,当函数值低于限制时,它应该以 (1+x/N+(x/N)^2/2)^N 结束。

def exp(x):
      if abs(x)<0.0001:
            return 1+x+x**2/2
      else:
            y=exp(x/2)
            return y*y
4

2 回答 2

7

试试这个(注意2.0递归调用中的):

def exp(x):
    if abs(x) < 0.0001:
        return 1 + x + x**2 / 2.0
    else:
        y = exp(x / 2.0)
        return y * y

它失败了,因为如果你在 for 中传递一个整数x,比如说1,然后进行x / 2整数除法(在 python 2.x 中),这将导致0而不是0.5. 通过使用x / 2.0,它强制 python 使用浮点除法。

于 2015-07-16T20:34:37.130 回答
2
def exp(x):
    if abs(x)<0.0001:
        return 1+x+(x**2)/2.0
    else:
        y=exp(x/2.0)
        return y*y

整数除法截断。你需要花车在这里。

于 2015-07-16T20:34:26.217 回答