Go中的尾部调用优化

时间:2012-08-24 03:05:46

标签: go tail-recursion tail-call-optimization

到目前为止,Go编程语言是否优化了尾部调用?如果没有,它是否至少优化了函数的尾递归调用?

3 个答案:

答案 0 :(得分:15)

您可以通过互联网找到的所有内容,“在某些情况下支持可用的递归”,并在mailing list中告知:

  

对于某些情况,它已经在6g / 8g中,在gccgo中已经有了一些   更一般地说。

     

我们目前不打算更改要求的语言   编译器在所有情况下都实现尾调用优化。如果你必须   有一个尾调用,你使用循环或goto语句。

要获得这些案例,您最好深入了解golang source,这是开放的。

答案 1 :(得分:3)

没有。根据邮件列表上的核心开发团队,也没有任何计划。

答案 2 :(得分:0)

扩展@Rostyslav的出色答案。如果必须进行尾部调用(在此示例中为尾部递归调用),则可以执行以下操作。

package main

import "fmt"

func tail(i int) {
    if i == 0 {
        return
    } else {
        fmt.Println(i)
        tail(i - 1) //tail recursive call
    }
}
func main() {
    tail(3) //3, 2, 1
}