递归函数本质:
函数内部调用自身
递归特性:
1. 必须有一个明确的结束条件
2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少
3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)
递归的默认深度——998
修改递归深度
import sys print(sys.setrecursionlimit(100000))
三级菜单递归实现
menu = { '北京': { '海淀': { '五道口': { 'soho': {}, '网易': {}, 'google': {} }, '中关村': { '爱奇艺': {}, '汽车之家': {}, 'youku': {}, }, '上地': { '百度': {}, }, }, '昌平': { '沙河': { '老男孩': {}, '北航': {}, }, '天通苑': {}, '回龙观': {}, }, '朝阳': {}, '东城': {}, }, '上海': { '闵行': { "人民广场": { '炸鸡店': {} } }, '闸北': { '火车战': { '携程': {} } }, '浦东': {}, }, '山东': {}, } def threeM(menu): for i in menu: print(i) n = input(">>>") if n in menu: for key in menu[n]: print(key) menu = menu[n] return threeM(menu) threeM(menu)
二分法递归实现
l = [1,2,3,5,13,14,15,17,18,19,25,26,28,29,35,38,48,54,59,68,69,78,79,85,98,114,115] def find(l,aim,start=0,end=len(l)-1)): mid = (start+end)//2 if not l[start:end + 1]: return if l[mid]>aim: return find(l,aim,start,mid-1) elif l[mid]<aim: return find(l, aim,mid+1,end) else: return mid print(find(l,114)