国产成人毛片视频|星空传媒久草视频|欧美激情草久视频|久久久久女女|久操超碰在线播放|亚洲强奸一区二区|五月天丁香社区在线|色婷婷成人丁香网|午夜欧美6666|纯肉无码91视频

遞歸算法經(jīng)典實(shí)例 尾遞歸究竟是好是壞?

尾遞歸究竟是好是壞?如果遞歸級(jí)別太多,則會(huì)出現(xiàn)堆棧溢出異常,因?yàn)槊看握{(diào)用都會(huì)生成一個(gè)新的堆棧幀,并使用此堆棧幀保留當(dāng)前函數(shù)的狀態(tài)值。如果不需要保存狀態(tài)值,則可以重用堆棧幀而不會(huì)導(dǎo)致堆棧溢出。以n的階乘

尾遞歸究竟是好是壞?

如果遞歸級(jí)別太多,則會(huì)出現(xiàn)堆棧溢出異常,因?yàn)槊看握{(diào)用都會(huì)生成一個(gè)新的堆棧幀,并使用此堆棧幀保留當(dāng)前函數(shù)的狀態(tài)值。如果不需要保存狀態(tài)值,則可以重用堆棧幀而不會(huì)導(dǎo)致堆棧溢出。

以n的階乘為例:

正常遞歸:

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

尾部遞歸:

如果n=3,則每次調(diào)用都可以重用堆棧幀,因?yàn)椴恍枰4鏍顟B(tài)值。

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

什么是遞歸啊?

遞歸作為一種算法,廣泛應(yīng)用于編程語言中。它是指在運(yùn)行的程序中直接或間接調(diào)用自身的函數(shù)/過程/子程序的重入現(xiàn)象。調(diào)用自身的編程技巧稱為遞歸。過程或函數(shù)在其定義或描述中直接或間接地調(diào)用自己的方法。它通常將一個(gè)龐大而復(fù)雜的問題層層轉(zhuǎn)化為一個(gè)類似于原始問題的小規(guī)模問題來求解。遞歸策略只需要少量的程序來描述問題求解過程中所需的重復(fù)計(jì)算,大大減少了代碼量。遞歸的能力是用有限的語句定義一組無限的對(duì)象。用遞歸方法編寫的程序簡單易懂。一般來說,遞歸需要邊界條件、遞歸前向段和遞歸返回段。當(dāng)邊界條件不滿足時(shí),遞歸前進(jìn);當(dāng)邊界條件滿足時(shí),遞歸返回。注:(1)遞歸是在過程或函數(shù)中調(diào)用自身。(2) 在使用增量約簡策略時(shí),必須有一個(gè)顯式的遞歸結(jié)束條件,稱為遞歸退出。