天天看點

Python入門記錄(13)遞歸函數:我調用我自己

遞歸函數這裡就開始套娃了,跟遞歸比起來前面什麼循環嵌套都是小套娃了,下面先将一些定義。

定義

遞歸函數就是在函數定義的函數體内調用了這個函數本體,那麼這個函數就是一個遞歸函數。

遞歸函數必要的組成部分是遞歸的調用和遞歸的終止條件,不然的話函數已調用就無盡循環了。

過程

每遞歸調用一次,都會在棧内配置設定一個棧幀

每執行完一次函數,都會釋放相應的空間

優缺點

缺點:占用記憶體多,效率低

優點:思路和代碼簡單,友善了解

舉個栗子:

# 項目名: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,得出結果。