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

用遞歸實(shí)現(xiàn)斐波那契數(shù)列 斐波那契數(shù)列遞歸算法?

斐波那契數(shù)列遞歸算法?答:斐波那契數(shù)列遞歸算法是:在一列數(shù)中,從第三項(xiàng)開始,每項(xiàng)數(shù)等于和它相鄰的前面兩項(xiàng)數(shù)的和。用遞推式表示為:an 2=an 1 an(n≥1)尾遞歸究竟是好是壞?概念遞歸如果層次太

斐波那契數(shù)列遞歸算法?

答:斐波那契數(shù)列遞歸算法是:在一列數(shù)中,從第三項(xiàng)開始,每項(xiàng)數(shù)等于和它相鄰的前面兩項(xiàng)數(shù)的和。用遞推式表示為:an 2=an 1 an(n≥1)

尾遞歸究竟是好是壞?

概念

遞歸如果層次太多,就會照成棧溢出異常,因?yàn)槊空{(diào)用一次就會新生成一個棧幀,使用這個棧幀保留當(dāng)前函數(shù)的狀態(tài)值。如果沒有必要保存狀態(tài)值,那么就可以復(fù)用棧幀,不會造成棧溢出。

舉例

這里以求n的階乘舉例:

正常遞歸:

假如n=3;那么每一步都需要保留n值以及下一步函數(shù)的返回值,所以每次調(diào)用都需要創(chuàng)建一個新的棧幀

尾遞歸:

假如n=3,這里每一次調(diào)用是可以復(fù)用棧幀的,因?yàn)椴恍枰4鏍顟B(tài)值。


總結(jié)

所以說當(dāng)遞歸是在當(dāng)前棧幀執(zhí)行完之后,不需要再保留當(dāng)前棧幀,而是帶著當(dāng)前棧幀的結(jié)果,進(jìn)入到下一棧幀,就可以優(yōu)化為尾遞歸,一般尾遞歸需要滿足遞歸調(diào)用是函數(shù)體中最后執(zhí)行的語句。比如階乘的例子中最后執(zhí)行的語句是直接調(diào)用factorial(n-1, n*result),而不是一個表達(dá)式n * factorial(n -1),如果是表達(dá)式的話就需要一個棧幀來保留n和factorial(n -1)的結(jié)果。