不斷的對于某操作重復呼叫執行稱為遞回呼叫,遞回函式執行的這個程序中只有進堆疊(開辟空間),沒有出堆疊,直到最后一次呼叫完畢了,才逐個出堆疊,所以遞回函式在執行的時候非常的占用記憶體資源;如果執行的次數過多了,會產生記憶體溢位的現象;所以一定要控制遞回的層數,當符合某一條件時要終止遞回呼叫,幾乎所有的遞回都能用while回圈來代替;所以對于遞回要慎用!!!
遞回函式:在某個函式中,呼叫其本身(函式自己呼叫自己),這個函式整體我們稱為遞回函式,
如何定義遞回函式?(先假設此函式已經實作)
考慮切入點:(1).尋找一個臨界點(結束點);(2).本次的函式執行不能滿足最終的整體需求,所以還需要再次的去呼叫此函式;(找到后者和前者之間的關系,體現:后者的呼叫結束會將前者需要的資料回傳回來)
優點:遞回可以把問題簡單化,讓思路使為清淅,代碼更簡潔,缺點:遞回因系統環境影響大,當遞回深度太大時,可能會得到不可預知的結果,
演示遞回函式呼叫自身:
1 # 直接呼叫自身: 2 def f(): 3 f() 4 5 f()
1 # 間接呼叫自身: 2 def fa(): 3 fb() 4 def fb(): 5 fa() 6 7 fa()
代碼演示示例:
1 # 遞回求和:0 + 1 + 2 + 3 + 4 + ..... + n 的和 2 def mysum(n): 3 if n == 0: 4 return 0 5 return n + mysum(n-1) 6 7 print(mysum(100)) # 5050 8 print(mysum(998)) # 沒錯 ,是臨界點,再大就會溢位 9 print(mysum(1000)) # 程式崩潰(遞回的弊端) 10 11 12 # 計算1~5的階乘 13 def jiechen(num): 14 if num == 1: 15 return 1 16 return num * jiechen(num - 1) 17 18 print(jiechen(5)) 19 20 21 # 遍歷某個路徑下面的所有內容(檔案和目錄,考慮多級的情況) 22 import os 23 # 自定義函式(遞回函式):遍歷目錄層級(多層) 24 def printDirs(path): 25 dirs = os.listdir(path) 26 # 回圈處理此串列 27 for d in dirs: 28 # 組裝d得到其絕對路徑形式 29 fileAbsPath = os.path.join(path,d) 30 # 判斷是目錄還是檔案 31 # 如果是檔案直接列印即可,如果是目錄列印完畢后再次呼叫此函式 32 if os.path.isfile(fileAbsPath): 33 print(d) 34 elif os.path.isdir(fileAbsPath): 35 print(d) 36 printDirs(fileAbsPath) 37 path = r'C:\Users\Administrator\Desktop\a' 38 printDirs(path)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/187338.html
標籤:Python
上一篇:22.python匿名函式詳解
