擅长:python、mysql、java
<p>不能可靠地检查函数是否使用递归,不是吗</p>
<p>一个简单的递归函数将查找具有相同名称的全局函数并调用它,因此您必须查看函数字节码或将字节码解析为AST并尝试找到对同名全局对象的调用。但是如果使用的是一个<em>方法</em>或者函数是别名,那么您将有更困难的任务来检测它。在</p>
<p>此外,您通常测试被测对象的<em>功能</em>,而不是具体的实现。不是你想要的结果。在</p>
<p>也许您想避免递归,因为可能会用完堆栈。在这种情况下,您需要<em>测试堆栈是否用完</em>。在</p>
<p>将堆栈深度设置为一个小数字(使用<a href="https://docs.python.org/2/library/sys.html#sys.setrecursionlimit" rel="nofollow">^{<cd1>}</a>),创建一个比堆栈级别多的树,并尝试对其进行解析。如果抛出<code>RuntimeError</code>异常,则说明您使用的递归或其他方法过于依赖Python调用堆栈。在</p>