初识递归
初识递归
内容:
①什么是递归
②初识递归
③算法——二分查找法
④三级菜单——递归实现
一:概念
在函数中调用自身函数;
◆最大递归深度是997或者998 ,这是python从内存角度出发做的限制
◆修改最大深度:
import sys print(sys.setrecursionlimit(100000))
◆如果递归次数太多,则不太适合用递归来解决问题
◆优点:让代码更简单
◆缺点:占内存
def age(n): if n == 4: return 40 elif n > 0 and n < 4: return age(n+1) + 2 print(age(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] def find(l,aim,start = 0,end = None): end = len(l) if end is None else end mid_index = (end - start)//2 + start if start <= end: if l[mid_index] < aim: return find(l,aim,start=mid_index + 1,end=end) elif l[mid_index] > aim: return find(l,aim,start=start,end=mid_index-1) else: return mid_index else: return 'sorry,你要找的不在这儿' ret = find(l,66) print(ret)
def factorial(n): if n == 1: return 1 else: return n*factorial(n-1) num = int(input('请输入数字:')) print(factorial(num))
menu = { '北京': { '海淀': { '五道口': { 'soho': {}, '网易': {}, 'google': {} }, '中关村': { '爱奇艺': {}, '汽车之家': {}, 'youku': {}, }, '上地': { '百度': {}, }, }, '昌平': { '沙河': { '老男孩': {}, '北航': {}, }, '天通苑': {}, '回龙观': {}, }, '朝阳': {}, '东城': {}, }, '上海': { '闵行': { "人民广场": { '炸鸡店': {} } }, '闸北': { '火车战': { '携程': {} } }, '浦东': {}, }, '山东': {}, } def threeLM(dic): while True: for k in dic:print(k) key = input('input>>').strip() if key == 'b' or key == 'q':return key elif key in dic.keys() and dic[key]: ret = threeLM(dic[key]) if ret == 'q': return 'q' threeLM(menu)