Python中递归的安全性如何?

Ale*_*lex 1 python recursion stack

我正在做AI的家庭作业,尽管我的教授的建议,我无意在lisp写这个作业.但是,我确实希望以递归方式编写它,更好地保持简洁和简洁.这是我的问题:

如果我在大型状态空间执行搜索,我是否会遇到堆积空间不足的主要风险?Python堆栈有多深?

Jim*_*imB 23

Python堆栈有多深?

python中的默认递归限制是1000帧.您可以sys.setrecursionlimit(n)自行承担更改风险.

如果您已经开始使用python,我建议使用更适合该语言的模式.如果你想使用递归样式搜索,并且需要任意堆栈深度,你可以利用python的增强型生成器(协同程序)来创建"trampoline模式"(在PEP342中有一个例子)

尽管我的教授的建议,我无意在口齿不清中写这个作业

如果练习是基于递归的,那么尾随调用优化语言(如lisp)可能是您最好的选择.


Fre*_*Foo 5

Python中的递归(CPython,也就是说)不能更深入sys.getrecursionlimit().您可以将此限制设置为不同的值sys.setrecursionlimit.

我看到三个选择:

  1. 毕竟使用Lisp,它针对递归问题进行了优化(智能Lisp编译器将消除尾递归)
  2. 在递归函数中设置递归限制以获得无限递归(冒着程序吃火焰死亡的风险)
  3. 使用具有显式堆栈的迭代.一个简单的list意志.append是推,pop是流行.