作者:匿名用戶
鏈接:https://www.zhihu.com/question/20761771/answer/19996299
來源:知乎
著作權(quán)歸作者所有千诬。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。
參考我在Stackoverflow問的這個問題:
Why does C preserves both goto and while, involving tail recursion
以及:
為什么C語言同時保留‘goto’語句和‘while’寄狼,和尾遞歸有什么關(guān)系?
尾遞歸是什么?
轉(zhuǎn)自知乎
寫在后面:
眾所周知遞歸隨著深度增加可能出現(xiàn)一些問題 比如爆棧之類的
且占用內(nèi)存空間大 出入棧麻煩
尾遞歸相當(dāng)于把棧的深度用某個參數(shù)記錄下來
當(dāng)棧深度到達邊界條件時(一般是為0或1時)退出
這樣不用記錄每一層的數(shù)據(jù)
只需要執(zhí)行當(dāng)前層的操作就可以了
再引用知乎上某用戶的回答
function story() {
從前有座山,山上有座廟豫缨,廟里有個老和尚,一天老和尚對小和尚講故事:story() // 尾遞歸端朵,進入下一個函數(shù)不再需要上一個函數(shù)的環(huán)境了好芭,得出結(jié)果以后直接返回。
}
function story() {
從前有座山逸月,山上有座廟栓撞,廟里有個老和尚,一天老和尚對小和尚講故事:story()碗硬,小和尚聽了瓤湘,找了塊豆腐撞死了 // 非尾遞歸,下一個函數(shù)結(jié)束以后此函數(shù)還有后續(xù)恩尾,所以必須保存本身的環(huán)境以供處理返回值弛说。
}
作者:匿名用戶
鏈接:https://www.zhihu.com/question/20761771/answer/23254340
來源:知乎
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)翰意,非商業(yè)轉(zhuǎn)載請注明出處木人。
參考資料:https://www.cnblogs.com/catch/p/3495450.html
https://www.zhihu.com/question/20761771