簡體   English   中英

超過最大遞歸深度

[英]Maximum recursion depth exceeded

我收到“超出最大遞歸深度”錯誤。

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

#命令def辛普森(a,b):
c =(a + b)/ 2返回(ba)/ 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)), 

我收到錯誤“超出最大遞歸深度”

我在代碼中做錯了什么嗎,還是真的必須多次遍歷此遞歸公式? 而且,我該如何解決?

令人遺憾的是,Python並沒有進行尾部調用優化。 因此,您將必須序列化遞歸。

同樣,為了使TCO正常工作,您將需要重構函數(可能添加一個累加器參數)以使其成為尾調用。

您在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

在模塊開始時

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM