前往小程序,Get更优阅读体验!
立即前往
社区首页 >专栏 >在Python程序中设置函数最大递归深度

在Python程序中设置函数最大递归深度

作者头像
Python小屋屋主
发布于 2018-08-03 03:58:23
发布于 2018-08-03 03:58:23
3K0
举报
文章被收录于专栏:Python小屋Python小屋

在函数调用时,为了保证能够正确返回,必须进行保存现场和恢复现场,也就是被调函数结束后能够回到主调函数中离开时的位置然后继续执行主调函数中的代码。这些现场或上下文信息保存在线程栈中,而线程栈的大小是有限的。

对于函数递归调用,会将大量的上下文信息入栈,如果递归深度过大,会导致线程栈空间不足而崩溃。

Python中,为了防止栈崩溃,默认递归深度是有限的(在某些第三方开发环境中可能略有不同)。下图是IDLE开发环境的运行结果:

下图是Jupyter Notebook中的运行结果:

因此,在编写递归函数时,应注意递归深度不要太大,例如下面计算组合数的代码:

如果确实需要很深的递归深度,可以使用sys模块中的setrecursionlimit()函数修改默认的最大深度限制。例如:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-07-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python小屋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
递归
找到如何将大问题分解为小问题的规律,并基于此写出递推公式,然后再推敲出终止条件,最后将其翻译为代码
Vincent-yuan
2022/05/06
8240
递归
尾递归优化原理与Python实现(以Fibonacci数列和小明爬楼梯问题为例)
众所周知,在函数递归调用时,要保存函数调用的位置以便使得被调函数结束后能够返回正确的位置,这个信息保存在线程栈中。由于栈的空间有限,所以如果函数递归调用深度超过一定限制,会导致栈崩溃。并且,如果需要保存大量返回位置并且逐级返回的话,也会耗费大量的时间,使得代码运行速度非常慢。
Python小屋屋主
2019/12/12
2K0
python 递归与高阶函数
在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。
py3study
2018/08/02
9800
C语言递归求圆周率,python中的递归问题,求圆周率[通俗易懂]
return np.power(-1,n)*(1.0/(2*n+1))+getPi(n-1)
全栈程序员站长
2022/10/02
1K0
C语言递归求圆周率,python中的递归问题,求圆周率[通俗易懂]
数据结构与算法 --- 递归(一)
「递归(Recursion)」 是一种解决问题的方法,它将问题分解为更小的子问题,并逐层解决这些子问题。递归算法的核心思想是:「一个函数可以直接或间接地调用自身」。通过这种自我调用,我们可以用简洁的代码来解决复杂问题。
Niuery Diary
2023/10/22
3670
数据结构与算法 --- 递归(一)
函数之递归[通俗易懂]
在讲今天的内容之前,我们先来讲一个故事,讲的什么呢?从前有座山,山里有座庙,庙里有个老和尚讲故事,讲的什么呢?从前有座山,山里有座庙,庙里有个老和尚讲故事,讲的什么呢?从前有座山,山里有座庙,庙里有个老和尚讲故事,讲的什么呢?从前有座山,山里有座庙,庙里有个老和尚讲故事,讲的什么呢……这个故事你们不喊停我能讲一天!我们说,生活中的例子也能被写成程序,刚刚这个故事,让你们写,你们怎么写呀?
全栈程序员站长
2022/07/21
5200
c语言基础知识帮助理解(函数递归详解)
"从前有座山,山里有座庙,庙里有个老和尚和一个小和尚。有一天老和尚对小和尚说:“从前有座山.山里有座庙,庙里有个老和尚和一个小和尚,有一天老和尚对小和尚说:“从前有座山.山里有座庙,庙里有个老和尚和一个小和尚......" (虽能体现递归特点,但又不是递归)
是Nero哦
2024/01/18
2030
c语言基础知识帮助理解(函数递归详解)
递归函数
递归就是一个函数在它的函数体内调用它自身。执行递归函数将反复调用其自身,每调用一次就进入新的一层。递归函数必须有结束条件。
大忽悠爱学习
2021/03/04
7050
数据结构与算法-递归
本文为王争老师在『极客时间』中的课程《数据结构与算法之美》的学习笔记,想要学习原文的同学购买相关课程学习。如有侵权请联系作者删除。
用户3470542
2019/06/26
6810
数据结构与算法-递归
使用Python语言理解递归
一个函数在执行过程中一次或多次调用其本身便是递归,就像是俄罗斯套娃一样,一个娃娃里包含另一个娃娃。
py3study
2020/01/17
7690
漫画:二叉树系列 第一讲(最大深度与DFS)
在计算机科学中,二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。树比链表稍微复杂,因为链表是线性数据结构,而树不是。树的问题很多都可以由广度优先搜索或深度优先搜索解决。
程序员小浩
2020/03/31
6590
什么是递归函数?[通俗易懂]
递归就是一个函数在它的函数体内调用它自身。执行递归函数将反复调用其自身,每调用一次就进入新的一层。递归函数必须有结束条件。 当函数在一直递推,直到遇到墙后返回,这个墙就是结束条件。 所以递归要有两个要素,结束条件与递推关系
全栈程序员站长
2022/10/01
1K0
什么是递归函数?[通俗易懂]
python中如何用列表+yield打破"内卷"的递归
简单说,就是打印一个文件夹下,所有文件名字,包括所有子文件夹中的文件。如果只是用 python 提供的内置模块,是非常容易。但是这题却限制了,不允许使用内置模块。
咋咋
2023/02/10
1.7K0
python中如何用列表+yield打破"内卷"的递归
数据结构-递归
递归是一种应用非常广泛的算法(或者编程技巧)。之后我们要讲的很多数据结构和算法的编码实现都要用到递归,比如 DFS 深度优先搜索、前中后序二叉树遍历等等。所以,搞懂递归非常重要,否则,后面复杂一些的数据结构和算法学起来就会比较吃力。
acc8226
2022/05/17
5210
优化函数递归
递归是指函数/过程/子程序在运行过程序中直接或间接调用自身而产生的重入现象。在计算机编程里,递归指的是一个过程:函数不断引用自身,直到引用的对象已知。使用递归解决问题,思路清晰,代码少。但是在 Python 中,使用递归会消耗很大的空间,可能还会产生大量的重复的计算。所以我们应该想办法消除递归,下面我以斐波那契序列为例讲解几种消除递归的方法。
不可言诉的深渊
2019/08/13
1.1K0
第35期:从 DFS 学习二叉树!(适合小白)
我们知道,每个节点的深度与它左右子树的深度有关,且等于其左右子树最大深度值加上 1 。 即:
程序员小浩
2020/09/22
3890
第35期:从 DFS 学习二叉树!(适合小白)
如何用Python递归地思考问题?
递归是一个很经典的算法,在实际中应用广泛,也是面试中常常会提到的问题。本文就递归算法介绍如何在Python中实现递归的思想,以及递归在Python中使用时的一些注意事项,希望能够对使用Python的朋友提供一些帮助。
Python数据科学
2018/10/18
2.1K0
如何用Python递归地思考问题?
Python 中的递归,你真的懂了吗?
出现的效果就是,这个函数在不断的调用自己,每次调用就n+1,相当于循环了。  可是为何执行了900多次就出错了呢?还说超过了最大递归深度限制,为什么要限制呢?
用户7886150
2021/01/21
6890
javascript尾递归优化
JS中的递归我们来看一个阶乘的代码function foo( n ){ if(n <= 1){ return 1; } return n * foo( n - 1 );}foo(5); // 120下面分析一下,代码运行过程中,执行上下文栈是怎么变化的这个代码是在全局作用域中执行的,所以在foo函数得到执行之前,上下文栈中就已经被放入了一个全局上下文。之后执行一个函数,生成一个新的执行上下文时,JS引擎都会将新的上下文push到该栈中。如果函数执行完成,JS引擎会将对应的上下文从上下文栈中弹出
hellocoder2029
2022/10/21
6400
python递归函数讲解_Python递归函数实例讲解
本文实例讲述了python二分查找算法的递归实现方法.分享给大家供大家参考,具体如下: 这里先提供一段二分查找的代码: def binarySearch(alist, item): first = 0 last = len(alist)-1 found = False while first<=last and not found: midpoint = (first + last)//2 if alist[midpoint] == item: found = True else: if ite
全栈程序员站长
2022/11/17
3.4K0
python递归函数讲解_Python递归函数实例讲解
相关推荐
递归
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 大模型知识引擎×DeepSeek实践征文