到目前为止,Go编程语言是否优化了尾部调用?如果不是,它是否至少优化了函数对自身的尾递归调用?
3 回答
精慕HU
TA贡献1845条经验 获得超8个赞
在Internet上可以找到的所有内容,“ Go在某些情况下都支持可尾递归”,这在邮件列表中已说明:
在某些情况下,它已经以6g / 8g的形式存在,而在gccgo中则更为普遍。
我们目前不打算更改语言以要求编译器在所有情况下均实现尾部调用优化。如果必须进行尾部调用,则可以使用循环或goto语句。
为了得到这些情况,您最好深入研究golang source,它是开放的。
慕娘9325324
TA贡献1783条经验 获得超4个赞
扩展@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
}
- 3 回答
- 0 关注
- 193 浏览
添加回答
举报
0/150
提交
取消