Python最大递归,关于sys.setrecursionlimit()的问题

2024-05-18

我有一个问题sys.setrecursionlimit()

来自蟒蛇docs https://docs.python.org/2/library/sys.html#sys.setrecursionlimit这个函数:
将Python解释器堆栈的最大深度设置为limit。此限制可防止无限递归导致 C 堆栈溢出并导致 Python 崩溃。 最高可能限制取决于平台。当用户有需要深度递归的程序和支持更高限制的平台时,她可能需要设置更高的限制。应该小心执行此操作,因为过高的限制可能会导致崩溃。

这是我的问题:

让我们看一下这个无用的递归函数:

def rec(N):
     if N==0:
         return 1
     else:
         return rec(N-1);

现在让我们将最大递归设置为 100:

sys.setrecursionlimit(100)

如果我尝试rec(99)(100 次递归调用),我得到:

RuntimeError: maximum recursion depth exceeded

计算rec(99)我需要将递归限制设置为 105。

为什么会这样呢?


这名字起得不好它应该说堆栈深度,而不是递归深度。递归意味着它是一遍又一遍地限制同一个线程。实际上,您可以拥有仅调用 100 深度的实际代码。我不会推荐它,但你可以。他们可以侥幸逃脱惩罚,因为在现实世界中,唯一遇到这种情况的时候就是递归。当你因此而崩溃时,看到“递归”这个词可以立即告诉你要寻找什么,而不是“堆栈”。

(堆栈应该给任何体面的程序员同样的线索,但说实话,你的代码刚刚崩溃了,你想要一个相关的错误消息,对吧? 99.99999% 的时间这会准确地告诉你你搞砸了什么(你错过了你的基本情况)递归。))

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python最大递归,关于sys.setrecursionlimit()的问题 的相关文章

随机推荐

  • 如何判断一个网页是否支持jquery?

    确定网页是否启用 jquery 的最佳方法是什么 如果这是确定它的最佳方法 则使用 jquery 本身 if jQuery jquery object exists jQuery 并不神奇 它本质上只是一个大对象 您可以像检查任何其他对象一
  • Google App Engine with Java - 运行 javac.exe 编译器时出错

    在 Windows XP 上 刚刚下载并解压谷歌应用程序引擎java sdk to C Program Files appengine java sdk 我已经安装了jdk C Program Files Java jdk1 6 0 20
  • 您可以将 Docker 映像直接拉入 IBM Cloud Kubernetes 集群吗?

    TL DR 抱歉 如果这是基础知识 我正在学习 Kubernetes 我尝试在 IBM Cloud 中创建 Kubernetes 部署 但失败了 该部署在我的本地 minikube 上运行良好 但在 IBM Cloud 中失败 我是否需要使
  • 我的 linq select 不起作用,我的 foreach 起作用

    我有以下 LINQSelect这是行不通的 Data Select d gt d Value IsDirty true Not working 我的较长解决方法确实如此 foreach var d in Data d Value IsDir
  • 将 Bootstrap 与 Bower 一起使用

    我正在尝试将 Bootstrap 与 Bower 一起使用 但由于它克隆了整个存储库 因此没有 CSS 和其他内容 这是否意味着我需要在我自己的构建过程中包含构建 Bootstrap 或者如果我错了 正确的工作流程是什么 I finally
  • 添加自定义过渡会导致 xib 加载错误的屏幕尺寸

    我正在尝试向具有 xib 的 UIViewController 添加自定义过渡 我尝试了几种方法 但它们都有相同的问题 视图显示的屏幕尺寸错误 我当前的示例基于以下教程 使用 Swift 在 iOS 中自定义 UIViewControlle
  • 为什么这个谓词格式会变成 '= nil'

    有人建议这个线程 https stackoverflow com questions 40686005 nspredicate crash after swift 3 migration与我的问题完全相同 但是 我的应用程序没有崩溃 并且我
  • 使 .net web api 队列请求以“单线程”方式运行

    我们有一个 c net Web API 服务调用代码 该代码无法一次处理多个数据库请求 该系统适用于需求相对较小的账单在线支付 我们无法控制代码来进行可以解决问题的更改 另一个使用相同代码的小组使用 WCF API 和服务配置将并发请求限制
  • 猪的组连接等效吗?

    试图在 Pig 上完成这个任务 寻找 MySQL 的 group concat 等效项 例如 在我的表中 我有以下内容 3fields userid clickcount pagenumber 155 2 12 155 3 133 155
  • 如何解决 Laravel 8 UI 分页问题?

    我在尝试最近发布的 laravel 8 时遇到了问题 我试图找出变化是什么以及它是如何工作的 当我这样做时 我遇到了分页 laravel 8 UI 变得混乱的问题 不知何故它发生了 有人可以帮助我吗 或者经历过同样的事情 像这样我在 lar
  • Inc 函数 Inno Setup

    这可能非常简单 但是当我尝试编译包含以下内容的程序时 Inc Count 在 Inno Setup 中我不断得到 未知标识符 Inc 我相信这就是在 Pascal 中递增整数的方式 并且对如何继续这里感到困惑 我正在使用 Inno Setu
  • Rails 资源单数还是复数?

    我有一条搜索路线 我想将其设为单数 但是当我指定单数路线时 它仍然会生成复数控制器路线 这是应该的样子吗 resource search Gives me search POST search format action gt create
  • 在 Windows 7 中使用 ActivePerl @ARGV 为空

    我有以下 Perl 脚本 我正在尝试使用 ActivePerl 在 Windows 7 中运行它 c Perl64 bin perl exe w use strict my mp3splt exe c Program Files x86 m
  • 为 PostgreSQL 查询选择正确的索引

    简化表 CREATE TABLE products product no integer PRIMARY KEY sales integer status varchar 16 category varchar 16 CREATE INDE
  • 如何在 Swift 中获取字典中最后输入的值?

    如何获取 Swift 字典中最后输入的值 例如 我如何从下面获取值 CCC var dictionary Dictionary
  • Eslint 从另一个文件确定全局变量

    我试图以这样的方式设置 ESLint 使其在对实际目标文件进行 linting 之前解析全局声明文件 这样我就不必将所有确实是全局的函数和变量声明为全局 而是让解析器弄清楚 In 一些 模块 js function do something
  • 可以读取目标文件吗?

    我很好奇 obj文件 我几乎不知道它们是什么 或者它们包含什么 所以我用 Vim 文本编辑器打开它们 我在里面发现了一种类似外星人的语言 有什么办法可以理解它们代表什么以及它们的内容是什么 另外 它们的用途是什么 Thanks Sure 但
  • Python-将标题写入csv

    目前我正在用 python 编写查询 将数据从 oracle dbo 导出到 csv 文件 我不知道如何在文件中写入标题 try connection cx Oracle connect user pass tns name cursor
  • 在真实设备上展示测试广告

    这是我的代码 let request GADRequest request testDevices kGADSimulatorID XXXX2F32d69CCA859FFB559D0FEA3CF6483D08A6 adView load r
  • Python最大递归,关于sys.setrecursionlimit()的问题

    我有一个问题sys setrecursionlimit 来自蟒蛇docs https docs python org 2 library sys html sys setrecursionlimit这个函数 将Python解释器堆栈的最大深