Jas*_*ker 20 python tail-recursion tail-call-optimization
显然,对于Python是否需要尾调用优化,存在很大的争议.当有人向Guido发送SICP副本时,这个问题就出现了,因为他没有"得到它".我和Guido在同一条船上.我理解尾调用优化的概念.我真的想不出Python真正需要它的任何理由.
为了让我更容易理解,有人可以给我一些代码片段,使用TCO可以大大简化吗?
Jav*_*ier 14
就个人而言,我非常重视尾部呼叫优化; 但主要是因为它使递归与迭代一样有效(或使迭代成为递归的子集).在简约语言中,您可以在不牺牲性能的情况下获得巨大的表现力.
在"实用"语言(如Python)OTOH中,对于几乎所有可以想象的情况,你通常都有很多其他结构,因此它不那么重要.当然,总是一件好事,可以避免不可预见的情况
如果您非常希望将递归用于可能表示为循环的事物,那么"尾部调用优化"实际上是必须的.然而,Guido,Python的仁慈独裁者(BDFL),坚信循环被表达为循环 - 因此他不会进行特殊情况的尾调用(牺牲堆栈跟踪转储和调试规则性).
尾调用优化使得编写递归函数更容易,而不必担心堆栈溢出:
def fac(n, result=1):
if n > 1:
return fac(n - 1, n * result)
return result
Run Code Online (Sandbox Code Playgroud)
如果没有尾调用优化,使用大数字调用它可能会溢出堆栈.