为何Python中未达到最大递归次数?该数值是否为上限?
问题分析与解答
测试代码
try: start = 0 def recursion(): global start def repeat(): global start print('hello world') start += 1 print(recursion()) print(repeat()) print(recursion()) except RecursionError: print('you eached the limit') print(' ') print('recursion :',start, 'times')
运行结果
hello world hello world you eached the limit recursion : 497 times
问题解答
- 497不是Python的最大递归次数。Python默认的递归调用栈深度限制是1000,你可以通过
import sys; print(sys.getrecursionlimit())查看当前系统的递归限制值。 - 你的代码逻辑导致计数和实际栈深度不匹配:每一次
start +=1后,会调用recursion(),而recursion()内部又会调用repeat()——相当于每增加1次start计数,调用栈会新增两层(recursion->repeat-> 下一个recursion)。当栈深度接近1000的限制阈值时触发RecursionError,此时start的计数刚好到497(497*2=994,加上初始的几层调用,总栈深度就达到了限制)。 - 若要测试真实的最大递归次数,可以用最简递归函数验证,比如:
运行后会得到接近1000的计数(通常是997或998,因为初始调用栈已有几层)。import sys count = 0 def simple_recursion(): global count count +=1 simple_recursion() try: simple_recursion() except RecursionError: print(f"实际递归次数:{count}") print(f"系统递归限制:{sys.getrecursionlimit()}")
内容的提问来源于stack exchange,提问作者user19944660
相关产品推荐
相关产品推荐

