首先,遞歸不是python獨有的,遞歸是一種算法,簡單地說,就是一個函數不停地調用自己,直至達到停止條件。
構成遞歸需具備兩個條件:
- 子問題須與原始問題為同樣的事,且更為簡單;
- 不能無限制地調用本身,須有個出口(即要有個邊界),化簡為非遞歸狀況處理其中遞歸又分為直接遞歸和間接遞歸。
遞歸又分為兩情況,分別為直接遞歸和間接遞歸。
- 直接遞歸是在A函數中嵌套使用A函數,然后有一個停止該函數的條件。
- 間接遞歸是在A函數中調用B函數,然后在B函數中調用A函數,即間接調用自己實現遞歸。
這里我用著名的斐波那契數列(即從第3項起,后一個數為前兩項之和)做演示:
運行得出第10項結果為34,結果正確。現在我們來分析其運行過程中,為方便理解,我們計算第5項,運行過程我們用如下圖表示:
從圖中我們可以看出,所謂遞歸,就是把大的事件,逐步細化分別進行處理,這就是分治的思想。
那么遞歸是在計算機中怎樣實現的呢?如果我們有了解過數據結構這門課程,我們就會知道,這就是用棧來實現的。
還有一點值得注意的,我們看上圖是不是有些相同的部分重復調用了,所以說使用遞歸會使程序變得相對慢一些,在日常開發中,我們是比較少用的,雖然遞歸的代碼塊看起來比較簡潔。