===============>>#1 票数:394 已采纳
是的,它可以防止堆栈溢出。 Python(或更确切地说,CPython实现)无法优化尾部递归,并且无限制的递归会导致堆栈溢出。 您可以检查与递归限制sys.getrecursionlimit和更改与递归限制sys.setrecursionlimit ,但这样做是危险的-标准限值是有点保守,但是Python stackframes可以说是相当大的。
Python不是一种功能语言,尾部递归并不是一种特别有效的技术。 如果可能的话,迭代地重写算法通常是一个更好的主意。
===============>>#2 票数:111
import sys
sys.setrecursionlimit(1500)
===============>>#3 票数:50
这是为了避免堆栈溢出。 Python解释器限制了递归的深度,以帮助您避免无限递归,从而导致堆栈溢出。 尝试增加递归限制(sys.setrecursionlimit)或不递归地重写代码。
sys.getrecursionlimit()
返回递归限制的当前值,即Python解释器堆栈的最大深度。 此限制可防止无限递归导致C堆栈溢出和Python崩溃。 可以通过setrecursionlimit()进行设置。
===============>>#4 票数:17
使用保证尾叫优化的语言。 或使用迭代。 另外,也可以和装饰工一起变得可爱。
===============>>#5 票数:17
如果您经常需要更改递归限制(例如,在解决编程难题时),则可以定义一个简单的上下文管理器,如下所示:
import sys
class recursionlimit:
def __init__(self, limit):
self.limit = limit
self.old_limit = sys.getrecursionlimit()
def __enter__(self):
sys.setrecursionlimit(