到目前為止,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 關注
- 226 瀏覽
添加回答
舉報
0/150
提交
取消