遞歸函數(shù)效率高嗎 遞歸算法的速度會(huì)特別慢的原因是什么?
遞歸算法的速度會(huì)特別慢的原因是什么?遞歸調(diào)用本身需要使用系統(tǒng)堆棧,每次分配函數(shù)內(nèi)存和堆棧都需要時(shí)間。然而,這個(gè)過(guò)程并不需要太多時(shí)間??梢哉f(shuō),簡(jiǎn)單遞歸本身并不比非遞歸慢多少。然而,在實(shí)際應(yīng)用中,人們會(huì)發(fā)
遞歸算法的速度會(huì)特別慢的原因是什么?
遞歸調(diào)用本身需要使用系統(tǒng)堆棧,每次分配函數(shù)內(nèi)存和堆棧都需要時(shí)間。然而,這個(gè)過(guò)程并不需要太多時(shí)間。可以說(shuō),簡(jiǎn)單遞歸本身并不比非遞歸慢多少。然而,在實(shí)際應(yīng)用中,人們會(huì)發(fā)現(xiàn)遞歸在處理一些問(wèn)題,特別是遞歸問(wèn)題時(shí)效率很低。這個(gè)問(wèn)題是由重復(fù)計(jì)算引起的,例如,用遞推法求解斐波那契數(shù)列的第n項(xiàng),一般的遞推公式是f(n)=f(n-1)f(n-2)f(2)=1F(1)=當(dāng)你計(jì)算f(5)時(shí),你會(huì)嘗試計(jì)算f(4)和f(3)。但是,當(dāng)計(jì)算f(4)時(shí),還需要計(jì)算f(3),因此f(3)被調(diào)用兩次。假設(shè)這個(gè)過(guò)程是指數(shù)擴(kuò)展的,并且效率會(huì)隨著n的增加而迅速下降。為了解決這個(gè)問(wèn)題,我們可以使用記憶法的思想。定義內(nèi)存數(shù)組R,并將函數(shù)體更改為:Define f(n):如果定義了R[n],那么只需返回R[n]作為答案。否則,f(n)=f(n-1)f(n-2)在返回值之前,將其記在R[n]中。改進(jìn)后的遞推函數(shù)的效率與遞推算法基本相同