Tail Call Optimization in Go

后端 未结 3 1028
孤独总比滥情好
孤独总比滥情好 2020-12-09 15:06

Does the Go programming language, as of now, optimize tail calls? If not, does it at least optimize tail-recursive calls of a function to itself?

相关标签:
3条回答
  • 2020-12-09 15:26

    Everything you can find over the Internet, that "Go supports tailable recursions in some cases", and that was told in mailing list:

    It is already there in 6g/8g for certain cases, and in gccgo somewhat more generally.

    We do not currently plan to change the language to require that compilers implement tail call optimization in all cases. If you must have a tail call, you use a loop or a goto statement.

    To get those cases you'd better dig into golang source, which is open.

    0 讨论(0)
  • 2020-12-09 15:32

    It does not. Nor is there any plan to according to the core development team on the mailing list.

    0 讨论(0)
  • 2020-12-09 15:46

    Extending @Rostyslav's excellent answer. If you must have a tail call, (in this example a tail recursive call) you can do something like this.

    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
    }
    
    0 讨论(0)
提交回复
热议问题