我收到“超出最大递归深度”错误。
#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)),
我收到错误“超出最大递归深度”
我的代码中是否有任何错误,或者它是否真的需要多次遍历此递归公式?而且,我该如何解决这个问题?
答案 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
在模块的开头