1 問題遞歸函數(shù)是在python算法中比較常見的一種做題方法,在做過大量的算法題會發(fā)現(xiàn),當(dāng)遇到我們需要在計(jì)算時(shí)用到許多我們不確定的數(shù),同時(shí)加上數(shù)學(xué)運(yùn)算法則,那么在排除了用其他數(shù)學(xué)思維巧妙計(jì)算之后,則是最好利用遞歸函數(shù)來代替暴力解法。 2 方法具體方法如下 通過查閱資料了解到,遞歸函數(shù)其實(shí)只是python函數(shù)學(xué)習(xí)中的一個(gè)類型,我們也可以理解成函數(shù)嵌套使用,所以遞歸函數(shù)類似于一種函數(shù)學(xué)習(xí)思想,我們要學(xué)習(xí)的就是這一種思想。 通過確定的數(shù)來了解遞歸函數(shù)的思想。 通過增加難度,包括利用不確定的數(shù)來解決問題,深度理解遞歸函數(shù)的用法 總結(jié)
首先通過一個(gè)簡單的例子來了解遞歸函數(shù),就比如我們想要解決一個(gè)數(shù)的階乘是多少這個(gè)問題,在python中我們是希望能定義一個(gè)函數(shù)來接收這個(gè)數(shù),但是我們不清楚這個(gè)數(shù)究竟多大,并且無法定義有限個(gè)函數(shù)都來接收這個(gè)數(shù)的每一階,所以就能用到遞歸函數(shù)的思想。 代碼清單1
def yuki(num): if num>1: return num*yuki(num-1) else: return num print(yuki(num=int(input()))) |
我們不難發(fā)現(xiàn),在執(zhí)行第一個(gè)函數(shù)yuki時(shí),返回return時(shí)又遇到了yuki這個(gè)值,而里面的形式參數(shù)變成了num-1,這時(shí)這個(gè)yuki函數(shù)會以新的實(shí)際參數(shù)重新進(jìn)行總得函數(shù)運(yùn)行,直到最終滿足if條件,這就是遞歸函數(shù)的思想。 我們知道一個(gè)數(shù)的階乘是從他自身一直相乘下來的,但是如果我們不知道一個(gè)數(shù)的運(yùn)算過程怎么辦呢,這里有一個(gè)問題,(假如說有一群猴子摘了一堆桃子,猴子每次只吃一半后再吃一個(gè),只知道第十天只剩一個(gè)了,要算最開始一共摘了多少個(gè)桃子的話,不是用簡單的循環(huán)能做出來的,這時(shí)候我們用遞歸函數(shù)就是一個(gè)十分明智的選擇)。
代碼清單2 def yuki(day,x): if day == 1: return x else: return yuki(day-1,(x+1)*2) print(yuki(day=int(input()),x=int(input()))) |
很明顯我們通過迭代的返回桃子的計(jì)算公式,設(shè)置條件為第一天,達(dá)到第一天時(shí)公式計(jì)算得出的x值就是桃子的數(shù)量,那么我們就得到了我們想要的結(jié)果了,這就是在不確定數(shù)的情況下使用遞歸的優(yōu)勢區(qū)間。
3 結(jié)語簡單來說,遞歸函數(shù)是一種數(shù)學(xué)的思維方式,我們有著必須學(xué)習(xí)遞歸的理由,因?yàn)槲覀儗W(xué)習(xí)Python便是解決實(shí)際問題的,解決問題有時(shí)不只是需要解決,還需要思考如何做到代碼簡單,容量小,運(yùn)算時(shí)間少,才是最優(yōu)的,而有時(shí)利用好函數(shù)的遞歸思想能有效的避免暴力解題的步驟,能有效的優(yōu)化我們的代碼,這就是學(xué)習(xí)遞歸最絕殺的理由。
|