python 遞歸
阿新 • • 發佈:2017-09-06
elif put 過程 pan input 執行 clas python 三級
叠代是人,遞歸是神。 —— L.Peter Deutsch
定義:函數在執行的過程中調用自己。
遞歸算法一般用於解決三類問題:
1 數據的另一是按照遞歸定義的。比如斐波那契函數
2 問題解法按照遞歸算法實現。比如回溯。
3 數據的數據類型是按照遞歸定義的。比如樹的遍歷,圖的搜索。
遞歸的應用
三級菜單
menu = { ‘北京‘: { ‘海澱‘: { ‘五道口‘: { ‘soho‘: {}, ‘網易‘: {},‘google‘: {} }, ‘中關村‘: { ‘愛奇藝‘: {}, ‘汽車之家‘: {}, ‘youku‘: {}, }, ‘上地‘: { ‘百度‘: {}, }, }, ‘昌平‘: { ‘沙河‘: { ‘老男孩‘: {}, ‘北航‘: {}, }, ‘天通苑‘: {}, ‘回龍觀‘: {}, }, ‘朝陽‘: {}, ‘東城‘: {}, }, ‘上海‘: { ‘閔行‘: { "人民廣場": { ‘炸雞店‘: {} } }, ‘閘北‘: { ‘火車戰‘: { ‘攜程‘: {} } },‘浦東‘: {}, }, ‘山東‘: {}, }
# n=0 def foo(dic): while True: for key in dic: print(key) cmd=input(‘==>‘) if cmd==‘b‘: break elif cmd==‘q‘: return ‘q‘ elif cmd in dic: res=foo(dic[cmd]) # global n # n+=1 # print(‘第{}次:‘.format(n),res) if res==‘q‘: #res 是取下一級的返回值,只有cmd==‘q‘,才有返回值‘q’。註釋掉的代碼試了一下,break退出一層循環是res是None。用return實現了輸入q,每一層都退出了。
return ‘q‘ #這兩行代碼我覺的是精髓。 foo(menu)
實現了一級一級打印,按 b 返回上一級,按 q 直接退出。
python 遞歸