遞歸函數這裡就開始套娃了,跟遞歸比起來前面什麼循環嵌套都是小套娃了,下面先将一些定義。
定義
遞歸函數就是在函數定義的函數體内調用了這個函數本體,那麼這個函數就是一個遞歸函數。
遞歸函數必要的組成部分是遞歸的調用和遞歸的終止條件,不然的話函數已調用就無盡循環了。
過程
每遞歸調用一次,都會在棧内配置設定一個棧幀
每執行完一次函數,都會釋放相應的空間
優缺點
缺點:占用記憶體多,效率低
優點:思路和代碼簡單,友善了解
舉個栗子:
# 項目名:pythonProject2
# NAME:demo16
# 開發時間:2021/4/15 23:57
#遞歸計算階乘
def jiecheng(n) :
if n == 1 :
return 1
else:
res = n*jiecheng(n-1)
return res
return
s = jiecheng(6)
print(s)
通過編譯過程可以發現,遞歸就是有兩個過程,分别是遞和歸。
遞就是向下傳遞,反複調用函數本身的過程;歸就是在碰到了結束遞歸的條件,在這個例子中就是當n= 1時,一層一層傳回上級,将每一次調用函數return的值都再套到上一次調用的函數中,最終到第一次調用的函數的時候,就得出了最後的值。具體分析一下就是:
遞:
jiecheng(6)
6jiecheng(5))
65jiecheng(4)
654jiecheng(3)
6543jiecheng(2)
65432*jiecheng(1)
歸:
當n=1,jiecehng(1)傳回的值為1,層層向上return,得出結果。