为了账号安全,请及时绑定邮箱和手机立即绑定

Go中的尾部呼叫优化

Go中的尾部呼叫优化

Go
呼啦一阵风 2021-05-04 21:22:55
到目前为止,Go编程语言是否优化了尾部调用?如果不是,它是否至少优化了函数对自身的尾递归调用?
查看完整描述

3 回答

?
精慕HU

TA贡献1845条经验 获得超8个赞

在Internet上可以找到的所有内容,“ Go在某些情况下都支持可尾递归”,这在邮件列表中已说明

在某些情况下,它已经以6g / 8g的形式存在,而在gccgo中则更为普遍。

我们目前不打算更改语言以要求编译器在所有情况下均实现尾部调用优化。如果必须进行尾部调用,则可以使用循环或goto语句。

为了得到这些情况,您最好深入研究golang source,它是开放的。


查看完整回答
反对 回复 2021-05-17
?
呼如林

TA贡献1798条经验 获得超3个赞

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


查看完整回答
反对 回复 2021-05-17
?
慕娘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

}


查看完整回答
反对 回复 2021-05-17
  • 3 回答
  • 0 关注
  • 193 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信