小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

深入理解遞歸函數(shù)

 算法與編程之美 2024-12-30 發(fā)布于四川

1 問題

遞歸函數(shù)是在python算法中比較常見的一種做題方法,在做過大量的算法題會發(fā)現(xiàn),當(dāng)遇到我們需要在計(jì)算時(shí)用到許多我們不確定的數(shù),同時(shí)加上數(shù)學(xué)運(yùn)算法則,那么在排除了用其他數(shù)學(xué)思維巧妙計(jì)算之后,則是最好利用遞歸函數(shù)來代替暴力解法。

2 方法

  1. 具體方法如下

    1. 通過查閱資料了解到,遞歸函數(shù)其實(shí)只是python函數(shù)學(xué)習(xí)中的一個(gè)類型,我們也可以理解成函數(shù)嵌套使用,所以遞歸函數(shù)類似于一種函數(shù)學(xué)習(xí)思想,我們要學(xué)習(xí)的就是這一種思想。

    2. 通過確定的數(shù)來了解遞歸函數(shù)的思想。

    3. 通過增加難度,包括利用不確定的數(shù)來解決問題,深度理解遞歸函數(shù)的用法

    4. 總結(jié)

  2. 首先通過一個(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())))
  3. 我們不難發(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ù)的思想。

  4. 我們知道一個(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í)遞歸最絕殺的理由。

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多