递归函数
递归
在一个函数里面调用自己
默认递归最大限度为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)