我正在努力解决这个问题:
https://projecteuler.net/problem=12
不幸的是,我收到错误消息:
RuntimeError:调用Python对象时超出了最大递归深度
程序首先调用除数函数,然后计算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()
答案 0 :(得分:3)
Python不是一种函数式编程语言(虽然它有一些功能部分)。
因此,递归在Python中没有完整的功能,有一个递归深度限制。这就是你所面临的错误。你达到了递归深度限制。
尝试使用函数调用和循环来实现它,而不是使用递归。