一、递归 函数
为什么要有函数,提高代码的可读性,避免重复的代码,提高代码的复用性
在函数中能用return的不要print
1、递归的最大深度997
def foo(n):print(n)n+=1foo(n) foo(1)
2、修改递归的最大深度
由此我们可以看出,未报错之前能看到的最大数字就是997.
当然了,997是python为了我们程序的内存优化所设定的一个默认值,
我们当然还可以通过一些手段去修改它:
import sys sys.setrecursionlimit(2000) n=0 def func():global nn+=1print(n)func() func() # 1997
3、递归的例子
例一:
现在你们问我,alex老师多大了?我说我不告诉你,但alex比 egon 大两岁。
你想知道alex多大,你是不是还得去问egon?egon说,我也不告诉你,但我比武sir大两岁。
你又问武sir,武sir也不告诉你,他说他比金鑫大两岁。
那你问金鑫,金鑫告诉你,他40了。。。
这个时候你是不是就知道了?alex多大
def age(n):if n==4:return 40else:return age(n+1)+2 print(age(1)) #46
详细解析步骤:
4、总结:
在一个函数里面调用自己,默认的递归最大限度是1000(不要修改递归的最大限度)
往往递归都是和循环挂在一起的,人理解循环,神理解递归
二、二分查找算法
def find_2(l,aim,start=0,end=None):if end==None:end=len(l)-1if start<=end:mid=(end-start)//2+startif l[mid]>aim:ret=find_2(l,aim,start,mid-1)return retelif l[mid]<aim:ret=find_2(l,aim,mid+1,end)return retelse:return aim,midelse:print("找不到这个值") l=[2,3,4,5,6,7,8,9,10,11,12,13,14,15] print(find_2(l,6))
例题:
1、阶乘的算法 4*3*2*1
def f(n): if n==1:return 1else:return n*f(n-1) print(f(4))
2、斐波那契数列
# 1,1,2,3,4,5,8,13... # n=10 def fib(n):if n==1 or n==2:return 1else:return fib(n-1)+fib(n-2) print(fib(10))
3、三级菜单:
menu = {'北京':{'海淀':{'五道口':{'sogo':{},'网易':{},'google':{}},'中关村':{'爱奇艺':{},'汽车之家':{},'youku':{},},'上地':{'百度':{},},},'昌平':{'沙河':{'汇德商厦老男孩':{},'北航':{},},'天通苑':{},'回龙观':{},},'朝阳':{'朝阳大妈' },'东城':{},},'上海':{'闵行':{"人民广场":{'炸鸡店':{}}},'闸北':{'火车战':{'携程':{}}},'浦东':{},},'山东':{'高丽':{}},}
def meu_3(menu):while True:for key in menu:print(key)choice=input("选择:")if choice=="q" or choice=="b":return choiceelif choice in menu and menu[choice]:borq=meu_3(menu[choice])if borq=="q":return "q"
meu_3(menu)