拥有超过500个除数的第一个三角形数的值是多少?

时间:2017-10-05 15:08:48

标签: python

我正在努力解决这个问题:

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()

1 个答案:

答案 0 :(得分:3)

Python不是一种函数式编程语言(虽然它有一些功能部分)。

因此,递归在Python中没有完整的功能,有一个递归深度限制。这就是你所面临的错误。你达到了递归深度限制。

尝试使用函数调用和循环来实现它,而不是使用递归。

请参阅Python Recursion Limit