創(chuàng)新互聯(lián)www.cdcxhl.cn八線動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買(mǎi)多久送多久,劃算不套路!
python函數(shù)遞歸是什么?針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。
在一個(gè)函數(shù)體內(nèi)調(diào)用它自身,被稱(chēng)為函數(shù)遞歸。函數(shù)遞歸包含了一種隱式的循環(huán),它會(huì)重復(fù)執(zhí)行某段代碼,但這種重復(fù)執(zhí)行無(wú)須循環(huán)控制。
例如有如下數(shù)學(xué)題。己知有一個(gè)數(shù)列:f(0) = 1,f(1) = 4,f(n + 2) = 2*f(n+ 1) +f(n),其中 n 是大于 0 的整數(shù),求 f(10) 的值。這道題可以使用遞歸來(lái)求得。下面程序?qū)⒍x一個(gè) fn() 函數(shù),用于計(jì)算 f(10) 的值。
def fn(n) : if n == 0 : return 1 elif n == 1 : return 4 else : # 函數(shù)中調(diào)用它自身,就是函數(shù)遞歸 return 2 * fn(n - 1) + fn(n - 2) # 輸出fn(10)的結(jié)果 print("fn(10)的結(jié)果是:", fn(10))
在上面的 fn() 函數(shù)體中再次調(diào)用了 fn() 函數(shù),這就是函數(shù)遞歸。注意在 fn() 函數(shù)體中調(diào)用 fn 的形式:
return 2 * fn(n - 1) + fn(n - 2)
對(duì)于 fn(10),即等于 2*fn(9)+fn(8),其中 fn(9) 又等于 2*fn(8)+fn(7)……依此類(lèi)推,最終會(huì)計(jì)算到 fn(2) 等于 2*fn(1)+fn(0),即 fn(2) 是可計(jì)算的,這樣遞歸帶來(lái)的隱式循環(huán)就有結(jié)束的時(shí)候,然后一路反算回去,最后就可以得到 fn(10) 的值。
仔細(xì)看上面遞歸的過(guò)程,當(dāng)一個(gè)函數(shù)不斷地調(diào)用它自身時(shí),必須在某個(gè)時(shí)刻函數(shù)的返回值是確定的,即不再調(diào)用它自身:否則,這種遞歸就變成了無(wú)窮遞歸,類(lèi)似于死循環(huán)。因此,在定義遞歸函數(shù)時(shí)有一條最重要的規(guī)定: 遞歸一定要向已知方向進(jìn)行。
例如,如果把上面數(shù)學(xué)題改為如此。己知有一個(gè)數(shù)列:f(20)=1,f(21)=4,f(n + 2)=2*f(n+1)+f(n),其中 n 是大于 0 的整數(shù),求 f(10) 的值。那么 f(10) 的函數(shù)體應(yīng)該改為如下形式:
def fn(n) : if n == 20 : return 1 elif n == 21 : return 4 else : # 函數(shù)中調(diào)用它自身,就是函數(shù)遞歸 return fn(n + 2) - 2*fn(n + 1)
從上面的 fn() 函數(shù)來(lái)看,當(dāng)程序要計(jì)算 fn(10) 的值時(shí),fn(10) 等于 fn(12)-2*fn(11),而 fn(11) 等于 fn(13)-2*fn(12)……依此類(lèi)推,直到 fn(19) 等于 fn(21)-2*fn(20),此時(shí)就可以得到 fn(19) 的值,然后依次反算到 fn(10) 的值。這就是遞歸的重要規(guī)則:對(duì)于求 fn(10) 而言,如果 fn(0) 和 fn(1) 是已知的,則應(yīng)該采用 fn(n)=2*fn(n-1)+fn(n-2) 的形式遞歸,因?yàn)樾〉囊欢艘阎?;如?fn(20) 和 fn(21) 是已知的,則應(yīng)該采用 fn(n)=fn(n+2)-2*fn(n+1) 的形式遞歸,因?yàn)榇蟮囊欢艘阎?/p>
遞歸是非常有用的,例如程序希望遍歷某個(gè)路徑下的所有文件,但這個(gè)路徑下的文件夾的深度是未知的,那么就可以使用遞歸來(lái)實(shí)現(xiàn)這個(gè)需求。系統(tǒng)可定義一個(gè)函數(shù),該函數(shù)接收一個(gè)文件路徑作為參數(shù),該函數(shù)可遍歷出當(dāng)前路徑下的所有文件和文件路徑,即在該函數(shù)的函數(shù)體中再次調(diào)用函數(shù)自身來(lái)處理該路徑下的所有文件路徑。
總之,只要在一個(gè)函數(shù)的函數(shù)體中調(diào)用了函數(shù)自身,就是函數(shù)遞歸。遞歸一定要向已知方向進(jìn)行。
關(guān)于python函數(shù)遞歸是什么問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道了解更多相關(guān)知識(shí)。
網(wǎng)站欄目:python函數(shù)遞歸是什么-創(chuàng)新互聯(lián)
文章網(wǎng)址:http://www.sd-ha.com/article36/iopsg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、企業(yè)建站、服務(wù)器托管、定制網(wǎng)站、品牌網(wǎng)站建設(shè)、企業(yè)網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容