日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python之递归函数和内建函数

發布時間:2023/12/18 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python之递归函数和内建函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

知識預覽

  • 遞歸函數
  • 內建函數(Built-in Functions)
回到頂部

遞歸函數

定義:調用一個函數的過程中出現調用函數本身,成為函數的遞歸調用。

例1:

某公司四個員工坐在一起,問第四個人薪水,他說比第三個人多1000,問第三個人薪水,第他說比第二個人多1000,問第二個人薪水,他說比第一個人多1000,最后第一人說自己每月5000,請問第四個人的薪水是多少?

要知道第四個人的月薪,就必須知道第三個人的,第三個人的又取決于第二個人的,第二個人的又取決于第一個人的,而且每一個員工都比前一個多一千,數學表達式即:

salary(4)=salary(3)+1000 salary(3)=salary(2)+1000 salary(2)=salary(1)+1000 salary(1)=5000簡化為: salary(n)=salary(n-1)+1000 (n>1) salary(1)=5000 (n=1)

其實,這就是一個遞歸函數,遞歸分為兩個階段:回溯和遞推。

第n個員工的薪水表示為第(n-1)個學生的薪水,可第(n-1)個學生的薪水仍然不知道,所以繼續回溯到第(n-2)個學生的薪水……直到第一個員工的薪水,此時,salary(1)已知不必再向前回溯了。然后開始第二個階段:遞推,從第一個員工的薪水可以推算出
第二個員工的薪水(6000),從第二個員工的薪水可以推算出第三個員工的薪水(7000)……一直推算出第第四個員工的薪水(8000)為止,遞歸結束。需要注意的一點是,遞歸一定要有一個結束條件,否則陷入無限死循環,這里salary(1)=5000就是結束條件。

流程圖:

?

代碼實現:

def salary(n):if n==1:return 5000return salary(n-1)+1000s=salary(4) print(s)

例2: 通過遞歸求n的階乘

分析其數學表達式為:

(1)factorial(n)=n*factorial(n-1) (2)factorial(1)=1

代碼實現:

def factorial(n):if n==1:return 1return n*factorial(n-1)print(factorial_new(3))

遞歸函數的優點: 定義簡潔,邏輯清晰。理論上,所有的遞歸函數都可以寫成循環的方式,但循環的邏輯處理會復雜一些。

遞歸特性:

  • 必須有一個明確的結束條件

  • 每次進入更深一層遞歸時,問題規模相比上次遞歸都應有所減少遞歸效率不高,遞歸層次過多會導致棧溢出(

  • 在計算機中,函數調用是通過棧(stack)這種數據結構實現的,每當進入一個函數調用,棧就會加一層棧幀,每當函數返 回,棧就會減一層棧幀。由于棧的大小不是無限的,所以,遞歸調用的次數過多,會導致棧溢出。

  • 練習:通過循環和遞歸兩種方式實現斐波那契數列

    def fibo(n):before=0after=1for i in range(n-1):ret=before+afterbefore=afterafter=retreturn retprint(fibo(3))#**************遞歸********************* def fibo_new(n):#n可以為零,數列有[0]if n <= 1:return nreturn(fibo_new(n-1) + fibo_new(n-2))print(fibo_new(3)) 1 print(fibo_new(30000))#maximum recursion depth exceeded in comparison View Code 回到頂部

    內建函數(Built-in Functions)

    abs()dict()help()min()setattr()
    all()dir()hex()next()slice()
    any()divmod()id()object()sorted()
    ascii()enumerate()input()oct()staticmethod()
    bin()eval()int()open()str()
    bool()exec()isinstance()ord()sum()
    bytearray()filter()issubclass()pow()super()
    bytes()float()iter()print()tuple()
    callable()format()len()property()type()
    chr()frozenset()list()range()vars()
    classmethod()getattr()locals()repr()zip()
    compile()globals()map()reversed()__import__()
    complex()hasattr()max()round()?
    delattr()hash()memoryview()set()?

    轉載于:https://www.cnblogs.com/skyflask/articles/8282673.html

    創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的python之递归函数和内建函数的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。