python--函數之遞迴與二分法

來源:互聯網
上載者:User

標籤:ace   rac   lse   返回   必須   索引   color   recent   sdi   

 一.遞迴

   1.遞迴的定義:在函數中調用函數本身,就是遞迴.

def func():    print("我是真的好看!!!")    func()func()結果:我是真的好看!!!我是真的好看!!!我是真的好看!!!.......

   在python中,遞迴的最大深度是1000,但是不會到1000,在這之前就會給你報錯.

count = 1def func():    global count    print("我是真的好看!!!",count)    count = count + 1    func()func()結果:.......我是真的好看!!! 997    #到998次就報錯了我是真的好看!!! 998 Traceback (most recent call last):  File "E:/wanchengdezuoye/複習/複習.py", line 1354, in <module>    func()

    遍曆D:/sylar檔案夾,列印出所有的檔案盒普通檔案的檔案名稱

import osdef func(filepath, n): # d:/sylar/    # 1,開啟這個檔案夾    files = os.listdir(filepath)    # 2. 拿到每一個檔案名稱    for file in files:  # 檔案名稱        # 3. 擷取到路徑        f_d = os.path.join(filepath, file) # d:/sylar/檔案名稱/        # 4. 判斷是否是檔案夾        if os.path.isdir(f_d):            # 5. 如果是檔案夾. 繼續再來一遍            print("\t"*n, file,":") # 列印檔案名            func(f_d, n + 1)        else:   #  不是檔案夾. 普通檔案 遞迴出口,最終在這裡隱含著return            print("\t"*n, file)func("d:/sylar",0)

 

 二.二分法

     定義:二分尋找,每次能夠排除掉一半的資料,尋找的效率很高,但是必須是有序序列才可以使用二分法尋找.

                            ****要求:尋找的序列必須是有序序列******

li = [22,33,44,55,66,77,88,99,105,126,236,345,564,888]n = 100left = 0                        #左邊的邊界,索引為0right = len(li) - 1             #右邊的邊界,列表中資料的數量-1就是888的索引count = 1while left <= right:            #當資料n在列表中,左邊小於右邊,否則當交叉的時候,說明不在列表中    mid = (left + right) // 2   #求中間值    if li[mid] > n:             #當列表的中間索引的值大於n時,砍掉右面的        right = mid - 1         #中間索引項目左面移動一個,變成右邊的邊界    if li[mid] < n:        left = mid + 1    if li[mid] == n:        print("在列表中")        print(count)        break    count = count + 1else:    print("不在列表中")結果:不在列表中

    使用遞迴版二分法

li = [22,33,44,55,66,77,88,99,105,126,236,345,564,888]def func(n,left,right):    if left <= right:               #邊界        mid = (left + right) // 2        if n > li[mid]:            left = mid + 1            return func(n,left,right)    #遞迴,遞迴的入口        if n < li[mid]:            right = mid - 1            return func(n,left,right)      #深坑:函數的傳回值返回給函數,要多吃調用        if n == li[mid]:            print("找到了")            return mid      #返回找到的數在列表中的位置    else:        print("沒有")           #遞迴的出口        return -1               #沒有找到,返回-1,return什麼都不加,返回Noneret = func(88,0,len(li)-1)print(ret)結果:找到了6

 

python--函數之遞迴與二分法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.