使用Python中的递归计算exp(x)

时间:2015-07-16 20:28:46

标签: python math recursion exp

我尝试使用递归计算e ^ x,e ^ x = e ^(x / 2)* e ^(x / 2),并且e ^ x的第三阶Maclaurin expansion并且脚本不断返回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

2 个答案:

答案 0 :(得分: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

失败是因为如果你为x传递一个整数,比如1,那么x / 2会进行整数除法(在python 2.x中),这将导致{{ 1}}而不是0。通过使用0.5,它强制python使用float division。

答案 1 :(得分:3)

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

整数除法截断。你需要漂浮在这里。