递归函数
一、什么是递归函数?
简单来说,递归函数就是在函数内部调用自己,每调用一次就完成一次循环,直到达到最大递归层数或者用return结束递归函数。一般来说,在python中最大递归层数是有限制的。
二、测试递归最大深度。
def foo(n): print(n) n += 1 foo(n) foo(1)
三、递归函数的实际应用
1、递归函数实现三级菜单:
menu = { '北京': { '海淀': { '五道口': { 'soho': {}, '网易': {}, 'google': {} }, '中关村': { '爱奇艺': {}, '汽车之家': {}, 'youku': {}, }, '上地': { '百度': {}, }, }, '昌平': { '沙河': { '老男孩': {}, '北航': {}, }, '天通苑': {}, '回龙观': {}, }, '朝阳': {}, '东城': {}, }, '上海': { '闵行': { "人民广场": { '炸鸡店': {} } }, '闸北': { '火车战': { '携程': {} } }, '浦东': {}, }, '山东': {}, }
def func(menu): while True: for k in menu: print(k) name=input('>>>').strip() if name=='q' or name=='b': return name elif name in menu.keys() and menu[name]: ret=func(menu[name]) if ret=='q': return 'q' elif (not menu.get(name)) or(not menu[name]): continue func(menu)
2、二分法:
l = [2,3,5,10,15,16,18,22,26,30,32,55,56,66,67,69,72,76,82,83,88]
l = [2,3,5,10,15,16,18,22,26,30,32,55,56,66,67,69,72,76,82,83,88] def aa(l,aim,start=0,end=len(l)-1: mid=(start+end)//2 if start<=end: if aim<l[mid]: end=mid-1 return aa(l,aim,start,end) elif aim>l[mid]: start=mid+1 return aa(l,aim,start,end) else: print('bingo!') return mid else: return '找不到?' ret=aa() print(ret)
四、总结:
暂时就这些了,总之,人理解循环,神理解递归。递归的本质就是在函数内部调用自身。