Python RVO

2017-12-19 15:29:21 +08:00
 lniwn
import sys

sys.setrecursionlimit(100)
depth = 0

def main():
    global depth
    print(depth)
    depth += 1
    return main()

main()

经过测试发现,python 没有进行 rvo 优化,是我测试姿势问题,还是其他什么原因?望 dalao 指教。

2765 次点击
所在节点    Python
7 条回复
QAPTEAWH
2017-12-19 15:34:41 +08:00
这个叫 TCO 吧
jotsai
2017-12-19 15:40:47 +08:00
你想说尾递归优化吧,Python 没有
VicYu
2017-12-19 15:43:13 +08:00
lniwn
2017-12-19 15:48:11 +08:00
@QAPTEAWH Return Value Optimization,就是对这种最后一句是 return 的,不需要保留当前环境,就不用压栈了,但是实测还是压栈了,报 RecursionError 错误。
lniwn
2017-12-19 15:54:40 +08:00
@jotsai 对,看来名字果然是记错了,RVO 是对返回值的拷贝构造函数进行优化的。。。
lniwn
2017-12-19 15:58:28 +08:00
@VicYu 这样看来是动态语言多返回值的锅了?
lniwn
2017-12-19 16:01:28 +08:00
@QAPTEAWH 是的,我记错了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/416003

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX