2017-10-05 78 views
0

我試圖解決本練習:第一個三角形數字的值超過500個除數是多少?

https://projecteuler.net/problem=12

不幸的是,我收到錯誤消息:

RuntimeError:最大遞歸深度,同時調用Python對象

的PROGRAMM第一突破調用除數函數,然後計算n的三角形數字,然後檢查數字是否爲素數,如果是,則直接檢查n + 1的三角形數字,因爲根據定義沒有500個除數的素數。如果它不是主要的nunmber,它應該檢查三角形數字的除數,只要我沒有找到它們中的500個。

def triangle_number(n): 
    tri_number = int(n*(n+1)/2) # calculate triangle number for n 
    return tri_number 


def divisors(n): 
    tri_number = triangle_number(n) 
    if isprime(tri_number) is not True: # check if triangle number is prime 
     counter = 0 
     while counter < 500: # as long as we don't have enough divisors 
      for x in range(1, tri_number+1): 
       if tri_number % x == 0:  # check every triangle number for 
              # their divisors 
        counter = counter + 1 
       divisors(n+1) # if for-loop breaks, check the next tri number 
    else: 
     divisors(n+1) # do the same if the number is already prime 


def isprime(n): 
    [...] 


def main(): 
    print(divisors(1)) 


if __name__ == '__main__': 
    main() 
+2

[Python的遞歸函數錯誤: 「超過最大遞歸深度」]的可能的複製(https://stackoverflow.com/questions/2401447/python-recursive-function-error-maximum-recursion-深度超出) – MLavrentyev

+1

遞歸調用不是免費的,每層遞歸佔用內存中的空間。如果你正在運行遞歸深度限制,這是一個非常明顯的跡象,你正試圖遞歸地解決一個不需要以這種方式接近的問題。嘗試一種迭代解決方案。 –

+0

不解決問題,但'如果不是isprime(tri_number):'或'如果isprime(tri_number)不是True:'而不是與'True'的比較 – toonarmycaptain

回答

2

Python是不是功能的編程語言(儘管它有一些功能件)。

因此,遞歸在Python中沒有完備的funcionality,存在遞歸深度的限制。這是你面臨的錯誤。你達到了遞歸深度限制。

嘗試使用函數調用和循環來實現此操作,而不是使用遞歸。

Python Recursion Limit

相關問題