截至目前,Go编程语言是否优化尾调用?如果没有,它是否至少优化函数对其本身的尾递归调用?
截至目前,Go编程语言是否优化尾调用?如果没有,它是否至少优化函数对其本身的尾递归调用?
我刚写了一个新的库来解决这个限制。多亏了 Go 1.18 新引入的泛型语言特性,现在我们可以实现类型安全的无栈互递归函数。
扩展@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
}
这并不是事实。据邮件列表中核心开发团队表示,也没有任何计划。