python - Python 是否优化尾递归?

我有以下代码失败并出现以下错误:

RuntimeError: maximum recursion depth exceeded

我试图重写它以允许尾递归优化 (TCO)。我相信如果发生了 TCO,这段代码应该是成功的。

def trisum(n, csum):
    if n == 0:
        return csum
    else:
        return trisum(n - 1, csum + n)

print(trisum(1000, 0))

我应该断定 Python 不会产生任何类型的 TCO,还是只需要以不同的方式定义它?

最佳答案

不,从 Guido van Rossum 开始就永远不会了希望能够有适当的回溯:

Tail Recursion Elimination (2009-04-22)

Final Words on Tail Calls (2009-04-27)

您可以通过如下转换手动消除递归:

>>> def trisum(n, csum):
...     while True:                     # Change recursion to a while loop
...         if n == 0:
...             return csum
...         n, csum = n - 1, csum + n   # Update parameters instead of tail recursion

>>> trisum(1000,0)
500500

https://stackoverflow.com/questions/13591970/

相关文章:

python - 如何在不破坏默认行为的情况下覆盖 __getattr__?

python - 是否可以在没有迭代器变量的情况下实现 Python for range 循环?

linux - 我什么时候应该在 shell 变量周围加上引号?

mysql - 如何测试MySQL在哪个端口上运行以及是否可以连接?

c - Linux中的itoa函数在哪里?

python - 只读取文件的第一行?

linux - 如何重定向已运行进程的输出

python - 获取列表的内容并将其附加到另一个列表

linux - 省略任何 Linux 命令输出的第一行

python - 获取文件的最后n行,类似于tail