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))
运行截图
本文作者:也曾遇见山海
本文链接:https://www.cnblogs.com/laochai/p/16230574.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步