2017-10-05 28 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

相关问题