在 Python 中使用递归计算 exp(x)
Calculating exp(x) with the use of recursion in Python
我正在尝试使用递归 e^x = e^(x/2)*e^(x/2) 和三阶 Maclaurin expansion 来计算 e^x对于 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
def exp(x):
if abs(x)<0.0001:
return 1+x+(x**2)/2.0
else:
y=exp(x/2.0)
return y*y
整数除法截断。这里需要花车。
试试这个(注意递归调用中的 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 ),这将导致 0
而不是 0.5
。通过使用 x / 2.0
,它强制 python 使用浮点除法。
我正在尝试使用递归 e^x = e^(x/2)*e^(x/2) 和三阶 Maclaurin expansion 来计算 e^x对于 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
def exp(x):
if abs(x)<0.0001:
return 1+x+(x**2)/2.0
else:
y=exp(x/2.0)
return y*y
整数除法截断。这里需要花车。
试试这个(注意递归调用中的 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 ),这将导致 0
而不是 0.5
。通过使用 x / 2.0
,它强制 python 使用浮点除法。