到目前为止,Go编程语言是否优化了尾部调用?如果没有,它是否至少优化了函数的尾递归调用?
答案 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
}