1. 程式人生 > 其它 >Python資料結構與演算法(1)

Python資料結構與演算法(1)

一、遞迴

遞迴特點:1、呼叫自己  2、結束條件

程式碼示例

 1 # 先遞迴後列印,會先列印最底層的數
 2 def func(x):
 3     if x>0:
 4         func(x - 1)
 5         print(x)
 6 func(3)
 7 # 先列印後遞迴,先列印最外層的數
 8 def func2(x):
 9     if x>0:
10         print(x)
11         func2(x - 1)
12 func2(3)

執行截圖

1、遞迴案例——漢諾塔

程式碼

 1 # 假設有n個盤子,把除了底下最大的盤子之外的盤子視為n-1個
2 # 1、把n-1個盤子從a經過c移動到b 3 # 2、把第n個盤子從a移動到c 4 # 3、把n-1個盤子從b經過a移動到c 5 6 # 移動次數遞推式 h(x)=2h(x-1)+1 7 def hanoi(n,a,b,c): 8 if n>0: 9 hanoi(n-1,a,c,b) 10 print("move from %s to %s"%(a,c)) 11 hanoi(n-1,b,a,c) 12 hanoi(3,'A','B','C')

執行截圖

 二、順序(線性)查詢

 程式碼示例

 1 # li表示要查詢的列表,va表示所要查詢的值
2 # 利用enumerate列舉函式列出列表li的每個元素下標key,值val 3 # 如果值val與所要查詢的值va相等則把下標key加到new_li陣列中,沒有就返回空陣列 4 def linear_search(li,va): 5 new_li=[] 6 for key,val in enumerate(li): 7 if val==va: 8 new_li.append(key) 9 return new_li 10 li=[12,23,34,56,45,67,13,32,13,48] 11 print(linear_search(li,13))

執行截圖

 三、二分查詢

程式碼

 1 def binary_search(li,va):  # li為待查詢的列表(已經排好順序),va為待查詢的值
 2     left=0                 # 左邊界
 3     right=len(li)-1        # 右邊界
 4     while left<=right:     # 候選區有值就迴圈
 5         mid=(left+right)//2
 6         if li[mid]==va:    # 中間值與待查詢的值相等,則直接返回中間值下標
 7             return mid
 8         elif li[mid]>va:   # 中間值比待查詢的值大,則把中間值下標減1賦值給右邊界
 9             right=mid-1
10         else:              # li[mid]<va 中間值比待查詢的值小,則把中間值下標加1賦值給左邊界
11             left=mid+1
12     else:
13         return None        # 找不到值返回None
14 li=[1,2,3,4,5,6,7,8,9]
15 print(binary_search(li,3))

執行截圖