【发布时间】:2014-05-08 23:41:40
【问题描述】:
我查看了 this question 试图更好地理解 scala 中的 @tailrec 注释。
我不确定注解是否还提示编译器进行一些优化,或者它仅在您标记不是尾递归的方法时用于警告?
更具体地说 - 此注释是否会以任何方式影响性能?比如我不放这个注解,编译器会把尾递归函数编译成非尾递归?
【问题讨论】:
-
查看this answer specifically,Scala 编译器似乎会自动优化它确定为尾递归的方法 - 注释仅用于向编译器发出信号,表明您期望 i> 这个方法能够参与那些优化。
-
我也这么认为,但我不确定。同样在与降低我信心的同事交谈后,我决定验证它。
-
请注意,如果有多个递归点并且其中只有一些(甚至只有一个)是尾递归的,而其他不是尾递归的,编译器不会在使用
@tailrec时将其标记为错误.
标签: scala recursion compiler-optimization tail-recursion