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()
[Python的遞歸函數錯誤: 「超過最大遞歸深度」]的可能的複製(https://stackoverflow.com/questions/2401447/python-recursive-function-error-maximum-recursion-深度超出) – MLavrentyev
遞歸調用不是免費的,每層遞歸佔用內存中的空間。如果你正在運行遞歸深度限制,這是一個非常明顯的跡象,你正試圖遞歸地解決一個不需要以這種方式接近的問題。嘗試一種迭代解決方案。 –
不解決問題,但'如果不是isprime(tri_number):'或'如果isprime(tri_number)不是True:'而不是與'True'的比較 – toonarmycaptain