Python中文
首页
教程
问答
标签
搜索
登录
注册
Python递归函数错误:“超过最大递归深度”
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我用下面的代码解决了Euler项目的第10个问题,该代码是通过蛮力工作的:</p> <pre><code>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.<a href="https://www.cnpython.com/list/append" class="inner-link">append</a>(i) return primes def sumPrimes(primelist): prime_sum = sum(primelist) return prime_sum print (sumPrimes(primeList(2000000))) </code></pre> <p>这三个功能的工作原理如下:</p> <ol> <li><strong>is prime</strong>检查数字是否为素数</li> <li><strong>prime list</strong>返回一个列表,该列表包含一组限定为“n”的特定范围的素数,并且</li> <li><strong>sumPrimes</strong>将列表中所有数字的值相加。(不需要最后一个函数,但我喜欢它的清晰性,特别是对于像我这样的初学者。)</li> </ol> <p>然后我编写了一个新函数<strong>primeListRec</strong>,它的作用与<strong>primeList</strong>完全相同,以帮助我更好地理解递归:</p> <pre><code>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 </code></pre> <p>上面的递归函数起作用,但只对很小的值起作用,如“500”。当我输入“1000”时,函数导致程序崩溃。当我输入一个类似“2000”的值时,Python给了我:</p> <p><strong>运行时错误:超过最大递归深度</strong>。</p> <p>我的递归函数做错了什么?或者有什么特定的方法来避免递归限制?</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>如前所述,在不能处理深层堆栈的语言中,最好采用迭代方法。尤其是在您的情况下,最好更改使用的算法。我建议使用<a href="http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes" rel="nofollow noreferrer">Sieve of Eratosthenes</a>来查找素数列表。它会比你现在的程序快得多。</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
Python中两个字典的交集
2 回答
python中两个字符串上的异或操作数?
9 回答
Python中两个字符串中的类似句子
7 回答
Python中两个字符串之间的Hamming距离
3 回答
python中两个字符串之间的匹配模式
5 回答
python中两个字符串之间的按位或
2 回答
python中两个字符串之间的数据(字节)切片
8 回答
python中两个字符串之间的模式
8 回答
python中两个字符串作为子字符串的区别
3 回答
Python中两个字符串元组的比较
5 回答
Python中两个字符串列表中的公共字符串
7 回答
python中两个字符串的Anagram测试
10 回答
Python中两个字符串的正则匹配
1 回答
python中两个字符串的笛卡尔乘积
1 回答
Python中两个字符串相似性的比较
10 回答
python中两个字符串语义相似度的求法
1 回答
Python中两个字符置换成固定长度的字符串,每个字符的数目相等
10 回答
Python中两个对数方程之间的插值和平滑数据
2 回答
Python中两个对象之间的And/Or运算符
8 回答
python中两个嵌套字典中相似键的和值
8 回答