久久精品国产99国产精品,农村大炕弄老女人,人马配速90分钟,香蕉成人伊视频在线观看

python計算n的階乘 尾遞歸究竟是好是壞?

尾遞歸究竟是好是壞?如果遞歸級別太多,則會出現(xiàn)堆棧溢出異常,因為每次調(diào)用都會生成一個新的堆棧幀,并使用此堆棧幀保留當前函數(shù)的狀態(tài)值。如果不需要保存狀態(tài)值,則可以重用堆棧幀而不會導致堆棧溢出。以n的階乘

尾遞歸究竟是好是壞?

如果遞歸級別太多,則會出現(xiàn)堆棧溢出異常,因為每次調(diào)用都會生成一個新的堆棧幀,并使用此堆棧幀保留當前函數(shù)的狀態(tài)值。如果不需要保存狀態(tài)值,則可以重用堆棧幀而不會導致堆棧溢出。

以n的階乘為例:

正常遞歸:

如果n=3,則每一步都需要保留n值和下一個函數(shù)的返回值,因此每次調(diào)用都需要創(chuàng)建一個新的堆棧幀

尾部遞歸:

如果n=3,則每次調(diào)用都可以重用堆棧幀,因為不需要保存狀態(tài)值。

因此,當遞歸在當前堆棧幀執(zhí)行后完成時,它不需要保留當前堆棧幀,但根據(jù)當前堆棧幀的結(jié)果,它可以在進入下一個堆棧幀時優(yōu)化為尾部遞歸。通常,尾部遞歸需要滿足遞歸調(diào)用是函數(shù)體中最后執(zhí)行的語句。例如,在factorial示例中,要執(zhí)行的最后一條語句是直接調(diào)用factorial(n-1,n*result),而不是表達式n*factorial(n-1)。如果是表達式,則需要堆棧幀來保留N和階乘(N-1)的結(jié)果。

主站蜘蛛池模板: 襄汾县| 北票市| 卢氏县| 兴安县| 象州县| 扶沟县| 揭西县| 海淀区| 临朐县| 师宗县| 皮山县| 三都| 维西| 雷山县| 太仓市| 桃园县| 喀喇沁旗| 普兰店市| 云霄县| 卓资县| 鄂伦春自治旗| 高唐县| 汾阳市| 蒙阴县| 拉孜县| 清水河县| 崇义县| 克拉玛依市| 合作市| 密山市| 龙川县| 沈阳市| 福海县| 湾仔区| 定兴县| 玉林市| 离岛区| 大冶市| 哈密市| 东源县| 麻栗坡县|