递归函数
递归
在一个函数里面调用自己
默认递归最大限度为1000
不要修改默认的递归最大限度
往往递归都是和循环挂在一起的
人理解循环,神理解递归
算法,递归函数
def story(): print('从前有座山,山里有座庙,庙里有个老和尚讲故事,讲的什么呢?') while True: story() def story(): print('从前有座山,山里有座庙,庙里有个老和尚讲故事,讲的什么呢?') story() story()
功能解耦
为什么要有函数:提高代码可读性,避免重复的代码,提高代码的复用性
在函数中能return的不要print
import sys print(sys.getrecursionlimit()) # 默认最大递归深度1000 sys.setrecursionlimit(1000) # 修改最大递归深度
alex多大了,我告诉你alex比egon大两岁
egon多大了,我告诉你egon比wusir大两岁
wusir多大了,我告诉你,wusir比金鑫大两岁
金鑫40了
# def age(n): # if n == 4: # return 40 # return age(n+1) + 2 def age(n): if n != 1: return age(n-1) + 2 else: return 40 print(age(4))
二分查找算法
# 如果有这样一个列表,让你从这个列表中找到66的位置,你要怎么做? 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_2(l,aim,start=0,end=None): if end == None: # 解决参数太多 end = len(l) - 1 if start <= end: # 解决要找的值找不到的问题 mid = (end-start)//2 +start if l[mid] > aim: return find_2(l,aim,start,mid-1) # 解决返回值的问题 elif l[mid] < aim: return find_2(l,aim,mid+1,end) # 解决返回值的问题 else: return aim,mid # 解决返回值的问题 else: print('找不到这个值') print(find_2(l,16))
阶乘的计算
# 什么叫阶乘 7*6*5*4*3*2*1 def f(n): if n == 1: return 1 return n*f(n-1) print(f(7))
斐波那契数列
# 1,1,2,3,5,8,13... def f(n): if n == 1 or n== 2: return 1 return f(n-1)+f(n-2) print(f(10))
三级菜单
menu = { '北京': { '海淀': { '五道口': { 'soho': {}, '网易': {}, 'google': {} }, '中关村': { '爱奇艺': {}, '汽车之家': {}, 'youku': {}, }, '上地': { '百度': {}, }, }, '昌平': { '沙河': { '老男孩': {}, '北航': {}, }, '天通苑': {}, '回龙观': {}, }, '朝阳': {}, '东城': {}, }, '上海': { '闵行': { "人民广场": { '炸鸡店': {} } }, '闸北': { '火车战': { '携程': {} } }, '浦东': {}, }, '山东': {}, } def menu_3(menu): while True: for key in menu: print(key) choice = input('选择:') # b返回上一级,q退出 if choice == 'q' or choice == 'b': return choice elif choice in menu and menu[choice]: borq = menu_3(menu[choice]) if borq == 'q': return 'q' else: print('到底了') menu_3(menu)