python開發 隨筆補充之遞歸函數與實例
阿新 • • 發佈:2017-09-06
closed code hid 遞歸函數 span art inpu 但我 重要
遞歸函數
遞歸函數的定義:
1、一個函數在內部調用自己,這就叫遞歸函數
2、遞歸的層數在python裏面是有限制的
3、必須要有一個結束條件
解耦:
要完成一個完整的功能,但這個功能的規模要盡量小,並且和這個功能無關的其他代碼應該和這個函數分離。
1、增強代碼的重要性
2、減少代碼變更的相互影響
例一:
現在你們問我,alex老師多大了?我說我不告訴你,但alex比 egon 大兩歲。
你想知道alex多大,你是不是還得去問egon?egon說,我也不告訴你,但我比武sir大兩歲。
你又問武sir,武sir也不告訴你,他說他比金鑫大兩歲。
那你問金鑫,金鑫告訴你,他40了。。。
這個時候你是不是就知道了?alex多大?
首先,你是不是問alex的年齡,結果又找到egon、武sir、金鑫,你挨個兒問過去,一直到拿到一個確切的答案,然後順著這條線再找回來,才得到最終alex的年齡。這個過程已經非常接近遞歸的思想。我們就來具體的我分析一下,這幾個人之間的規律。
4、aelx 46 # egon+2 4 age(4)=age(3)+2 3、egon 44 #武sir+2 age(3)=age(2)+2 2、武sir 42 # 金鑫+2 age(2)=age(1)+2 1、金鑫 40 #age(1)==40 def age(n): if n == 1: return 40 else: return age(n-1)+2 print(age(4)
例二:
二分查找:
l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,69,72,76,82,83,88]
def search(num,l,start=None,end=None): start = start if start else 0 end = end if階乘(沒有返回值)end else len(l)-1 mid = (end-start)//2+start if l[mid] > num: search(num,l,start,mid-1) elif l[mid] < num: search(num,l,mid+1,end) elif l[mid] == num: print(mid,l[mid]) #print(mid) search(66,l)
def search(num,l,start=None,end=None): start = start if start else 0 end = end if end len(l)-1 mid = (end-start)//2+start if l[mid] > num: return search(num,l,start,mid-1) elif l[mid] < num return search(num,l,mid+1,end) elif l[mid] == num return mid print(search(66,l))階乘(有返回值)
例三:
階乘:n=7 7*6*5*4*3*2*1
def func(n): if n==1: return 1 else: return n*func(n-1) print(func(7))
例四:
三級菜單:
menu = { ‘北京‘: { ‘海澱‘: { ‘五道口‘: { ‘soho‘: {}, ‘網易‘: {}, ‘google‘: {} }, ‘中關村‘: { ‘愛奇藝‘: {}, ‘汽車之家‘: {}, ‘youku‘: {}, }, ‘上地‘: { ‘百度‘: {}, }, }, ‘昌平‘: { ‘沙河‘: { ‘老男孩‘: {}, ‘北航‘: {}, }, ‘天通苑‘: {}, ‘回龍觀‘: {}, }, ‘朝陽‘: {}, ‘東城‘: {}, }, ‘上海‘: { ‘閔行‘: { "人民廣場": { ‘炸雞店‘: {} } }, ‘閘北‘: { ‘火車戰‘: { ‘攜程‘: {} } }, ‘浦東‘: {}, }, ‘山東‘: {}, } def func(menu): while True: for k in menu:print(k) key = input(‘>>>‘) elif key ==‘q‘:return ‘q‘ elif key == ‘b‘:break res=func(menu[key]) if res==‘q‘:return ‘q‘ func(menu)三級菜單
python開發 隨筆補充之遞歸函數與實例