python函數(遞歸函數,二分查找算法)


遞歸函數

遞歸函數:在函數中調用自身的函數

def story():
    print('從前有座山')
    story()
    print(111)

story()

 

遞歸函數的最大遞歸深度默認是997/998——是python從內存角度出發做的限制

RecursionError: maximum recursion depth exceeded while calling a Python object
遞歸的錯誤,超過了遞歸的最大深度

如果設置了遞歸的最大遞歸深度:

import sys
sys.setrecursionlimit(1000000)
n = 0
def story():
    global n
    n += 1
    print(n)
    story()
story()

會顯示最后電腦能達到的最大深度 (一般是3222)

 

如果遞歸次數太多,就不適合使用遞歸來解決問題

遞歸的缺點:占內存

遞歸的優點:會讓代碼變得簡單

 二分查找

排序 :
最短路徑

我們學習的算法 都是過去時
了解基礎的算法 才能創造出更好的算法
不是所有的事情都能套用現成的方法解決的
有些時候會用到學過的算法知識來解決新的問題

二分查找算法 必須處理有序的列表

l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]
def find(l,aim,start = 0,end = None):           #
    end = len(l) if end is None else end        #讓下面傳上來的元素個數不改變初始的元素個數
    mid_index = (end - start)//2 + start        #
    if start <= end:
        if l[mid_index] < aim:
            return find(l,aim,start =mid_index+1,end=end)
        elif l[mid_index] > aim:
            return find(l, aim, start=start, end=mid_index-1)
        else:
            return mid_index
    else:
        return '找不到這個值'


ret= find(l,44)
print(ret)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM