超出最大递归深度

时间:2013-11-18 05:43:16

标签: python recursion max

我收到“超出最大递归深度”错误。

#Defining an example function here
def f(x):
    return e**(-2*x)

#Command     def simpsons(a,b):
        c =(a + b)/ 2         return(b-a)/ 6 * f(a)+ 4 * f(c)+ f(b)

#The Adaptive Simpson's formula
def adaptive_simpsons(a,b,tol,comparison):
    c = (a+b)/2
    left = simpsons(a,c)
    right = simpsons(c,b)
    if abs((left + right - comparison)/15) < tol:
        return (left + right - comparison)/15 + left + right
    else:
        return adaptive_simpsons(a,c,tol/2,left) + adaptive_simpsons(c,b,tol/2,right)

但是,当我打印时:

print adaptive_simpsons(a,b,tol, simpsons(a,b)), 

我收到错误“超出最大递归深度”

我的代码中是否有任何错误,或者它是否真的需要多次遍历此递归公式?而且,我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

Python可能不会进行尾调用优化。因此,您必须序列化递归。

此外,对于TCO工作,您需要重构您的函数(可能添加一个累加器参数)以使其成为尾调用。

答案 1 :(得分:1)

simpsons

中有错误
def simpsons(a,b):   
    c = (a + b) / 2  #        V-here     and    here-V
    return abs((b - a) / 6) * (f(a) + 4 * f(c) + f(b))

此外,由于您似乎使用的是Python2,因此您应该

from __future__ import division

在模块的开头