相关疑难解决方法(0)

Python中的最大递归深度是多少,以及如何增加它?

我在这里有这个尾递归函数:

def recursiveFunction(n, sum):
    if n < 1:
        return sum
    else:
        return recursiveFunction(n-1, sum+n)

c = 998
print(recursiveFunction(c, 0))
Run Code Online (Sandbox Code Playgroud)

它可以工作到n = 997,然后它就会中断并吐出"比较时超出的最大递归深度" RuntimeError.这只是一个堆栈溢出?有办法解决它吗?

python recursion

357
推荐指数
13
解决办法
40万
查看次数

Python递归函数错误:"超出最大递归深度"

我使用以下代码解决了Euler项目的问题10,该代码通过强力实施:

def isPrime(n):

    for x in range(2, int(n**0.5)+1):
        if n % x == 0:
            return False
    return True


def primeList(n):

    primes = []

    for i in range(2,n):
        if isPrime(i):
            primes.append(i)

    return primes


def sumPrimes(primelist):
    prime_sum = sum(primelist)
    return prime_sum


print (sumPrimes(primeList(2000000)))
Run Code Online (Sandbox Code Playgroud)

这三个功能的工作原理如下:

  1. isPrime检查一个数字是否是素数;
  2. primeList返回一个列表,其中包含一组限制为"n"的特定范围的素数,并且;
  3. sumPrimes总结列表中所有数字的值.(不需要最后一个功能,但我喜欢它的清晰度,特别是像我这样的初学者.)

然后我编写了一个新函数primeListRec,它与primeList完全相同,以帮助我更好地理解递归:

def primeListRec(i, n):
    primes = []
    #print i


    if (i != n):
        primes.extend(primeListRec(i+1,n))

    if (isPrime(i)):
        primes.append(i)
        return primes


    return primes
Run Code Online (Sandbox Code Playgroud)

上面的递归函数有效,但仅适用于非常小的值,如'500'.当我输入'1000'时,该功能导致我的程序崩溃.当我输入类似'2000'的值时,Python给了我这个:

RuntimeError:超出最大递归深度.

我的递归函数出了什么问题?或者是否有一些特定的方法来避免递归限制?

python recursion

22
推荐指数
1
解决办法
7万
查看次数

标签 统计

python ×2

recursion ×2