python 15 days
python 15 days
递归函数和二分查找
递归函数:
自己调用自己。
import sys sys.setrecursionlimit(100000) def func1(): print(666) func1() func1()
666
666
666
666
666
666
666
666
666
666
666
666
666
666........
循环到998次停止
默认最大递归深度为998
count = 0 def func1(n): n += 1 print(n) func1(n) func1(count)
1
2
3
4
5
........
996
997
998
def age(n): if n == 1: return 23 else: return age(n-1) + 2 print(age(4)) # 23 + 2 + 2 + 2
29
二分查找:
用代码写的计算方式。
二分查找是最简单的算法,比较经典的算法。
1,数字序列,有序,不重复。
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] print(l.index(66))
17
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] count = 0 for i in l: if i == 66: print(count) count += 1 for i in range(len(l)): if l[i] == 47: print(i) break # else: print('找不到....')
17
找不到....
二分查找的代码展示
目标值:aim = 66 寻找中间索引: min_index = len(l) // 2 aim 与 中间索引对应的值进行比较 aim > l[min_index]: l[min_index+1:] aim < l[min_index]: l[:min_index-1] aim == l[min_index] return min_index
找例题中的索引位置:如下
l1 = [1, 3, 5, 7, 8, 10, 11] def binary_search(li,aim): # 1次:[1, 3, 5, 7, 8, 10, 11] aim 8 2次 :li = [ 8, 10, 11] 8 mid_index = len(li) // 2 # 1次:min_index: 3 2 次:min_index 1 3次:0 if aim > li[mid_index]: # 1次:8 > 7 return binary_search(li[mid_index+1:], aim) # [ 8, 10, 11] 8 elif aim < li[mid_index]: # 2 次:8 < 10 return binary_search(li[:mid_index], aim) # 3次: [8] 8 elif aim == li[mid_index]: return mid_index else: return None print(binary_search(l1,8))
0
找到索引的值为0