遞歸函數
遞歸函數:在函數中調用自身的函數
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)