一、递归 函数
为什么要有函数,提高代码的可读性,避免重复的代码,提高代码的复用性
在函数中能用return的不要print
1、递归的最大深度997
def foo(n): print(n) n+=1 foo(n) foo(1)
2、修改递归的最大深度
由此我们可以看出,未报错之前能看到的最大数字就是997.
当然了,997是python为了我们程序的内存优化所设定的一个默认值,
我们当然还可以通过一些手段去修改它:
import sys sys.setrecursionlimit(2000) n=0 def func(): global n n+=1 print(n) func() func() # 1997
3、递归的例子
例一:
现在你们问我,alex老师多大了?我说我不告诉你,但alex比 egon 大两岁。
你想知道alex多大,你是不是还得去问egon?egon说,我也不告诉你,但我比武sir大两岁。
你又问武sir,武sir也不告诉你,他说他比金鑫大两岁。
那你问金鑫,金鑫告诉你,他40了。。。
这个时候你是不是就知道了?alex多大
def age(n): if n==4: return 40 else: 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)-1 if start<=end: mid=(end-start)//2+start if l[mid]>aim: ret=find_2(l,aim,start,mid-1) return ret elif l[mid]<aim: ret=find_2(l,aim,mid+1,end) return ret else: return aim,mid else: 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 1 else: 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 1 else: 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 choice elif choice in menu and menu[choice]: borq=meu_3(menu[choice]) if borq=="q": return "q" meu_3(menu)