在函数调用时,为了保证能够正确返回,必须进行保存现场和恢复现场,也就是被调函数结束后能够回到主调函数中离开时的位置然后继续执行主调函数中的代码。这些现场或上下文信息保存在线程栈中,而线程栈的大小是有限的。
对于函数递归调用,会将大量的上下文信息入栈,如果递归深度过大,会导致线程栈空间不足而崩溃。
在Python中,为了防止栈崩溃,默认递归深度是有限的(在某些第三方开发环境中可能略有不同)。下图是IDLE开发环境的运行结果:
下图是Jupyter Notebook中的运行结果:
因此,在编写递归函数时,应注意递归深度不要太大,例如下面计算组合数的代码:
如果确实需要很深的递归深度,可以使用sys模块中的setrecursionlimit()函数修改默认的最大深度限制。例如:
---------董付国老师Python系列教材--------
1)《Python程序设计(第2版)》(2018年7月第7次印刷)
2)《Python可以这样学》(2018年7月第6次印刷)(本书已发行繁体版)
3)《Python程序设计基础(第2版)》(2018年7月第3次印刷)
4)《中学生可以这样学Python》2018年5月第2次印刷)
5)《Python程序设计开发宝典》(2018年2月第3次印刷)
6)《玩转Python轻松过二级》(2018年7月第3次印刷)
董付国老师6本Python系列图书阅读指南
董付国老师6本Python系列教材被北大、复旦等近百所高校选作教材
热烈庆祝《Python可以这样学》在台湾发行繁体版
董老师127课免费视频地址: https://pan.baidu.com/s/1jJeAs8Q 密码: px59
----------相关阅读----------
教学课件
1900页Python系列PPT分享一:基础知识(106页)
1900页Python系列PPT分享二:Python序列(列表、元组、字典、集合)(154页)
1900页Python系列PPT分享三:选择与循环结构语法及案例(96页)
1900页Python系列PPT分享四:字符串与正则表达式(109页)
1900页Python系列PPT分享五:函数设计与应用(134页)
1900页Python系列PPT分享六:面向对象程序设计(86页)
1900页Python系列PPT分享七:文件操作(132页)
1900页Python系列PPT分享八:异常处理结构与程序调试、测试(70页)
报告PPT(163页):基于Python语言的课程群建设探讨与实践
非计算机专业《Python程序设计基础》教学参考大纲
计算机相关专业“Python程序设计”教学大纲(参考)
报告PPT(123页):Python编程基础精要
《Python程序设计》实验指导书(30个实验)
系列题库分享
1000道Python题库系列分享一(17道)
1000道Python题库系列分享二(48道)
1000道Python题库系列分享三(30道)
1000道Python题库系列分享四(40道)
1000道Python题库系列分享五(40道)
1000道Python题库系列分享六(40道)
1000道Python题库系列分享七(30道)
1000道Python题库系列分享八(29道)
1000道Python题库系列分享九(31道)
1000道Python题库系列分享十(37道)
1000道Python题库系列分享十一(9道)
1000道Python题库系列分享十二(9道编程题)
相关阅读
Python泛型函数与单分发器
Python中的偏函数和函数柯里化
Python列表与数字的四则运算
详解Python切片技术
详解Python中的浅复制与深复制
Python运算符含义汇总
Python内置函数使用说明
Python模拟决赛现场最终得分计算过程
Python使用模块中对象的几种方法
Python计算信息熵
Python中定义只能实例化一个对象的类
Python从序列中选择k个不重复元素
时间都去哪儿了之Python程序测试与优化
Python函数嵌套定义的洪荒之力