递归函数
定义:在函数运行中,直接或间接调用了自身的函数。
( 官网表示:默认的最大递归数为1000,可使用sys.getrecursionlimit查看 )
ps: 如果想修改递归数可使用sys.setrecursionlimit(修改的次数) 进行修改
注:需要先使用 import sys 安装sys后才可操作。
递归:
1.递推
一层一层往下推导(每次递推后复杂程度相较于上次会有所下降)
2.回溯
依据最后得结论推导出最初需要的答案
(递归一定要有结束条件)
# 伪代码:可能无法运行,但可表达逻辑 # age(5) = age(4) + 2 # age(4) = age(3) + 2 # age(3) = age(2) + 2 # age(2) = age(1) + 2 # age(1) = 18 0 # 由(1)的岁数推出(5)的岁数 def get_name(n): if n == 1: return 18 return get_name(n - 1) + 2 print(get_name(5))
算法之二分法
算法:就是解决问题的高效方法
二分法:入门最简单的级别
使用条件:数据必须是有序的
(一般将数据一分为二后,从最后一个开始对比,不成功再将二分之一的数据再次分为二等分再比较直至找出)
l = [23, 56, 76, 87, 98, 123, 445, 657, 887, 954, 988] # 找出445 # plan 1 :使用for循环 for i in l: if i == 445: print('找到了') else: continue # plan2: 使用二分法 def my_plan(target_num, l): if len(l) == 0: # 找不到后则退出 print('抱歉,没有该数据') return middle_index = len(l) // 2 # 先获取中间位置的索引值 # 判断是大是小 if target_num > l[middle_index]: # 说明寻找的元素可能在右侧 l_right = l[middle_index + 1:] print(l_right) my_plan(target_num, l_right) elif target_num < l[middle_index]: # 说明寻找的元素可能在左侧 l_left = l[:middle_index] print(l_left) my_plan(target_num, l_left) else: print('找到了', target_num) my_plan(445, l) # 在()内输入想寻找的数据即可 # 如果要查找的数据在开头,二分法则没有for循环效率快