python递归次数和堆栈溢出问题

  在做递归的时候,测试了一下python的递归能力。

  如果不设置递归次数的话,大概只能在992次左右,就会出现错误:RuntimeError: maximum recursion depth exceeded

  如果使用代码:

  import sys
  sys.setrecursionlimit(1000000) #例如这里设置为一百万 

  设置了递归次数,到了9656次就会出现stack overflow的问题。查了一下,如果换成64位的python会好点。但是做递归容易引起溢出这个问题还是听蛋疼的,数据量一大的话,最好还是不要用了。

时间: 2024-11-10 00:34:17

python递归次数和堆栈溢出问题的相关文章

Javascript中递归造成的堆栈溢出及解决方案

关于堆栈的溢出问题,在Javascript日常开发中很常见,Google了下,相关问题还是比较多的.本文旨在描述如何解决此类问题. 首先看一个实例(当然你可以使用更容易的方式实现,这里我们仅探讨递归): function isEven (num) { if (num === 0) { return true; } if (num === 1) { return false; } return isEven(Math.abs(num) - 2); } //Outputs: true console

python递归次数限制引起的错误

使用BeautifulSoup时,可能会抛出如下错误: RecursionError: maximum recursion depth exceeded while calling a Python object 查看系统递归限制,调大即可: sys.getrecursionlimit() 1000 sys.setrecursionlimit(2000) 原文地址:http://blog.51cto.com/13934611/2165572

Python递归和迭代

递归 在函数内部,程序调用自身的编程技巧称为递归( recursion).递归函数结构清晰,很直观的理解计算过程,但也有严重缺点:相对于普通循环而言,递归运行效率较低,经过很多冗余的计算,递归会消耗大量的调用堆栈.在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧.每当函数返回,栈就会减一层栈帧.由于栈的大小不是无限的,因此,递归调用的次数过多,会导致栈溢出.因此,应该尽量用循环代替递归.在递归调用的过程当中系统为每一层的返回点.局部量等开辟了栈

Python——递归、二分查找算法

递归函数 1. 递归 (1)什么是递归:在函数中调用自身函数(2)最大递归深度:默认997/998--是Python从内存角度出发做的限制 n = 0 def story(): global n n+= 1 print(n) story() #997/998 story() (3)修改最大深度:最好不要改--递归次数太多,则不适合用递归解决问题 import sys sys.setrecursionlimit(2000) #1997/1998 2. 递归的优点 会让代码变简单 3. 递归的缺点

STM32/GD32上内存堆栈溢出探测研究

无数次遭受堆栈溢出折磨,随着系统变得复杂,故障点越来越难以查找!主要溢出情况如下:1,一般RAM最后两块空间是堆Heap和栈Stack,堆从下往上用,栈从上往下用,任意一个用完,都会进入对方的空间2,如果栈用完,进入堆的空间,这个时候系统是不会有任何异常的,也就是说,栈底没有什么意义.除非堆和栈指针重叠,否则大家相安无事,尽管栈用了堆的3,如果栈用完进入堆,并且还碰到了堆的空间,这个时候系统仍然没有异常,但是堆栈会相互修改数据.最悲剧的就是栈里面保存的然会地址lr,一旦被堆指针修改,返回的时候就

js堆栈溢出错误

function prompt() { var answer = prompt("What is your name","") if (answer) { alert("Hello, " + answer + "!"); } } 提示堆栈溢出.我就纳闷了. 反复测试之后,发现原来函数名不能命名为prompt. function prompttt() { var answer = prompt("What is you

汉诺塔问题的Python递归实现

汉诺塔问题的python递归实现 学习python遇到的第一个问题:汉诺塔问题的实现.首先是不知道什么是汉诺塔问题,然后是不知道怎么实现.于是百度了下,结果如下: 汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上.并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘 def hanoi(n,x,y,z): i

Delphi2010启动报错:‘displayNotification: 堆栈溢出

今天启动delphi2010报错: ‘displayNotification: 堆栈溢出 在网上搜索了下,解决方法: 1.清理IE的历史记录,删除浏览器缓存...一定要清楚默认浏览器的历史缓存,我平常用的是谷歌,系统默认的是360.......... 2.去掉delphi2010的欢迎界面(welcome page) 在注册表里找到 HKEY_CURRENT_USER\Software\codegear\BDS\7.0\Known IDE Packages删除右边的数据项: ($BDS)\Bin

Python递归报错:RuntimeError: maximum recursion depth exceeded in comparison

Python中默认的最大递归深度是989,当尝试递归第990时便出现递归深度超限的错误: RuntimeError: maximum recursion depth exceeded in comparison 简单方法是使用阶乘重现: 1 #! /usr/bin/env Python 2 3 def factorial(n): 4 5 if n == 0 or n == 1: 6 7 return 1 8 9 else: 10 11 return(n * factorial(n - 1)) >