初识递归函数
初识递归
def story():
print('从前有座山山里有座庙庙里有个老和尚')
story()
- 在函数中调用自己,就是递归函数
- 最大递归深度998,最大递归深度可以修改
- 优点:让代码变得简单
- 缺点:占用内存
递
-
分析问题
#递归小例子,求年龄 ''' 小明多大? n=1 age(1) = age(1+1) +2 >> age(n+1) +2 比小芳大两岁 小芳多大? n=2 age(2) = age(2+1) +2 >> age(n+1) +2 比小猪大两岁 小猪多大? n=3 age(3) = age(3+1) +2 >> age(n+1) +2 比小王大两岁 小王多大? n=4 40岁 ''' #定义递归函数 def age(n): if n == 4: return 40 elif n > 0: return age(n+1) + 2 #调用 print(age(3)) #给age一个参数完成计算
初识算法
-
计算的方法
99 * 13 = 100 * 13 - 13 = 1300 - 13 = 1287
-
查找
-
排序
-
最短路径问题
二分查找算法
- 必须处理有序的数列
#二分查找算法
def er_fen(num, iter, start=0, end=None):
end = len(iter) if end is None else end #确保end不是一个常量
mid_index = (end - start)//2 + start #目标索引位置
if start <= end:
if num == iter[mid_index]:
return '位置在{}'.format(mid_index)
elif num > iter[mid_index]:
return er_fen(num, iter, start=mid_index+1, end=end)
elif num < iter[mid_index]:
return er_fen(num, iter, start=start, end=mid_index - 1)
else:
return '没有这个数!'
li = [0, 1, 2, 3, 4, 8, 10, 33, 49, 1234, 3443]
#调用
print(er_fen(10, li))
print(er_fen(100, li))
#结果
位置在6
没有这个数
斐波那蝎数列
归
- 返回值
递归案例
- 三级菜单 -吊的一批
-
利用了
return
的作用dic = { '大城市': { '北京': { '一环': {}, '二环': {}, '郊区': {} }, '上海': { '东方明珠': {}, '珠江路': {}, '哈哈路': {} } }, '小城市': { '阜阳': { '界首市': {}, '临泉县': {} }, '合肥': { '明光路': {}, '虹桥机场': {}, '香格里拉': {} } } } def func(d): while 1: for i in d: print(i) name = input('>>').strip() if name == 'q' or name == 'b': return name elif name in d.keys() and d[name]: ret = func(d[name]) if ret == 'q': return 'q' elif not d.get(name) or not d[name]: continue func(dic)
-
利用堆栈实现三级菜单
l = [dic] #dic是上面的数据 while l: for i in l[-1]: print(i) k = input('>>').strip() if k in l[-1].keys() and l[-1]: l.append(l[-1][k]) elif k =='b': l.pop() elif k == 'q': break else: print('输入不正确,重新输入!')
-