代碼複用與函數遞歸(三)編程
函數遞歸segmentfault
在函數定義中,調用函數自身的方式就是遞歸。遞歸併非程序設計的專有名詞,在數學中也普遍存在。
例如:n!。在n!中,咱們定義當n=0時,n!爲1;除此以外,其他n!=n*(n-1)!這就是一種遞歸形式。函數
在遞歸的定義中有兩個關鍵的特性:鏈條和基例。鏈條指的是在遞歸定義中,它的計算過程是存在一種遞歸有序的鏈條關係。
例如:n!=n*(n-1)!,那麼n!與(n-1)!就構成了遞歸鏈條。
基例指的是存在一個或多個不須要再次遞歸的實例,例如:當n=0時,定義n!的值爲1,這就是一種基例,它與其它的值之間不存在遞歸關係,它已經是遞歸的最末端。spa
這兩種關鍵特性就構成了遞歸的定義,缺乏任意一個都構不成遞歸。在數學中被成爲數學概括法,遞歸也能夠認爲是數學概括法思惟在編程中的一種體現。設計
能夠看到要實現遞歸須要利用函數與分支語句進行組合。首先遞歸自己就是一個函數,由於它須要調用自身,若是不經過函數來定義,那麼很難調用自身。
blog
接着在函數內部,須要區分基例和鏈條,因此要使用一個分支語句對輸入參數進行判斷,若是輸入參數是基例的參數條件,咱們就要給出基例的代碼,若是不是基例的參數條件,咱們要用鏈條的方式表達這種遞歸關係。!遞歸
計算機調用函數會開闢內存,將函數內容複製進來,代入參數進行運算。遞歸看起來是調用了同一個函數,但在計算機內存中並不同,會不停的開闢內存、複製函數、代入參數運算。內存
推薦觀看:笨辦法學Python!編程小白的第一本Python入門書!get
思惟導圖筆記數學