面向函数编程
def func():print('从前有座山,山里有座庙,庙里有个老和尚讲故事,讲的什么呀?')func()
解耦:尽量把不相关的功能拆开,用的时候再调用函数,增强代码重用性,减少代码变更的相互影响
要完成一个完整的功能,但这个功能的规模要尽量小,并且和这个功能无关的其他代码应该和这个函数
分离
recursion 递归
什么是递归:
一个函数在内部调用了自己本身
def func():print('从前有座山,山里有座庙,庙里有个老和尚讲故事,讲的什么呀?')func()print('123')
这里面的123永远不会打印,永远都在执行下一个func()
import sys 和python解释器相关的模块
递归层数在python中最大997。可以改限制。
import syssys.setrecursionlimit(1000000) # 修改最大范围 ---但是 python 自己会根据计算机性能停止 count=0 def func():global countcount+=1print(count)func() func()
递归实例:
写递归函数,必须要有一个结束条件
alex比egon大两岁 alex=egon+2
egon比wusir大两岁 egon=wusir+2
wusir比金鑫大两岁 wusir=金鑫+2
金鑫40了 金鑫40
推测的过程是递,后面计算是归
def age(n):if n ==4:return 40return age(n+1)+2 f = age(1) print(f)
根据线索向下是递,拿到一个结果再向上是归
递归方法求阶乘:
def jie(n):return jie(n-1)*nprint(jie(7))
二分查找
l=[1,5,6,7,8,9,25,26,78,123,456,789,1233,7899,8521,9635,10255] def search(num,l,start=None,end=None):start=start if start else 0end=end if end else len(l)-1mid = (end-start)//2+startif start>end:return Noneif l[mid]>num:return search(num,l,0,mid-1)if l[mid]<num:return search(num,l,mid+1,end)if l[mid]==num:return mid,l[mid] print(search(78,l))
无序的先用.sort()排序
斐波那契数列递归
li=[1,1] def fib(n):if n>len(li):li.append(li[-2]+li[-1])fib(n)return li n = input('请输入要计算的数字个数:') n = int(n) ret = fib(n) print(ret)
面试真题递归
data={'time':'2016-08-05T13:13:05','some_id':'ID1234', 'grp1':{'fld1':1,'fld2':2}, 'xxx2':{'fld3':0,'fld5':0.4},'fld6':11,'fld7':7,'fld46':8} def select(data,fields):li=fields.split('|')for item in data:if item in li:print(item,data[item])elif type(data[item])==dict:ret = select(data[item],fields) n = input('按照格式输入:') select(data,n)
三级菜单递归
menu = {'北京': {'海淀': {'五道口': {'soho': {},'网易': {},'google': {}},'中关村': {'爱奇艺': {},'汽车之家': {},'youku': {},},'上地': {'百度': {},},},'昌平': {'沙河': {'老男孩': {},'北航': {},},'天通苑': {},'回龙观': {},},'朝阳': {},'东城': {},},'上海': {'闵行': {"人民广场": {'炸鸡店': {}}},'闸北': {'火车战': {'携程': {}}},'浦东': {},},'山东': {}, } #相同的数据类型 嵌套在一起def Three_Level_Menu(menu):while True:for k in menu:print(k)key = input('>>>')if key == 'q':return 'q'elif key == 'b':breakelif key in menu:ret = Three_Level_Menu(menu[key])if ret == 'q': return 'q' Three_Level_Menu(menu)