Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中使用递归计算exp(x)_Python_Math_Recursion_Exp - Fatal编程技术网

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

在Python中使用递归计算exp(x),python,math,recursion,exp,Python,Math,Recursion,Exp,我尝试使用递归计算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)

我尝试使用递归计算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
def exp(x):
如果abs(x)
def exp(x):
如果abs(x)则改为尝试此操作(注意递归调用中的
2.0
):

def exp(x):
如果abs(x)<0.0001:
返回1+x+x**2/2.0
其他:
y=exp(x/2.0)
返回y*y

这是失败的,因为如果为
x
传递一个整数,比如
1
,那么
x/2
进行整数除法(在python 2.x中),这将导致
0
而不是
0.5
。通过使用
x/2.0
,它迫使python使用浮点除法。

注意,这只是python 2中的一个问题。在3.x中,
/
始终表示真除法,而不管操作数如何。请注意,我更新了另一个除法(在
if
中)。如果没有这一点,它就不会对x=0起作用,因为它永远不会得到else子句,而else子句将它转换为float。因此,对于
exp(0)
,它将返回
0
,这是不正确的。请将
从uuuu future\uuuu导入部分
放在脚本顶部
def exp(x):
    if abs(x)<0.0001:
        return 1+x+(x**2)/2.0
    else:
        y=exp(x/2.0)
        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