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))

运行截图

 

posted @ 2022-05-06 21:40  也曾遇见山海  阅读(96)  评论(0)    收藏  举报