擅长:python、mysql、java
<p>Python不支持递归,因为它缺少TRE(<a href="http://neopythonic.blogspot.com/2009/04/tail-recursion-elimination.html" rel="noreferrer">Tail Recursion Elimination</a>)。</p>
<p>这意味着对递归函数的每次调用都将创建一个函数调用堆栈,并且由于堆栈深度有一个限制(默认值为1000),您可以通过<a href="http://docs.python.org/library/sys.html#sys.getrecursionlimit" rel="noreferrer">^{<cd1>}</a>签出(当然,您可以使用<a href="http://docs.python.org/library/sys.html#sys.setrecursionlimit" rel="noreferrer">sys.setrecursionlimit</a>更改堆栈深度,但不建议这样做),因此当程序达到此限制时,它将崩溃。</p>
<p>另一个答案已经为您提供了一个更好的方法来解决这个问题(即用简单循环替换递归),如果您仍然想使用递归,那么还有另一个解决方案,即使用许多在python中实现TRE的方法中的一个,比如<a href="http://code.activestate.com/recipes/474088-tail-call-optimization-decorator/" rel="noreferrer">one</a>。</p>
<p><strong>N.B:</strong>我的回答是为了让您更深入地了解为什么会出现错误,我不建议您使用我已经解释过的TRE,因为在您的情况下,循环会更好、更容易阅读。</p>