回覆列表
-
1 # EOFError
-
2 # 海的字碼
首先,遞迴不是python獨有的,遞迴是一種演算法,簡單地說,就是一個函式不停地呼叫自己,直至達到停止條件。
構成遞迴需具備兩個條件:
子問題須與原始問題為同樣的事,且更為簡單; 不能無限制地呼叫本身,須有個出口(即要有個邊界),化簡為非遞迴狀況處理其中遞迴又分為直接遞迴和間接遞迴。遞迴又分為兩情況,分別為直接遞迴和間接遞迴。
直接遞迴是在A函式中巢狀使用A函式,然後有一個停止該函式的條件。間接遞迴是在A函式中呼叫B函式,然後在B函式中呼叫A函式,即間接呼叫自己實現遞迴。這裡我用著名的斐波那契數列(即從第3項起,後一個數為前兩項之和)做演示:
執行得出第10項結果為34,結果正確。現在我們來分析其執行過程中,為方便理解,我們計算第5項,執行過程我們用如下圖表示:
從圖中我們可以看出,所謂遞迴,就是把大的事件,逐步細化分別進行處理,這就是分治的思想。
那麼遞迴是在計算機中怎樣實現的呢?如果我們有了解過資料結構這門課程,我們就會知道,這就是用棧來實現的。
還有一點值得注意的, 我們看上圖是不是有些相同的部分重複呼叫了,所以說使用遞迴會使程式變得相對慢一些,在日常開發中,我們是比較少用的,雖然遞迴的程式碼塊看起來比較簡潔。
不止python 裡面有,其他語言裡面也有,遞迴函式把函式在呼叫的時候,透過壓棧操作,當前函式如果執行完成,進行彈棧的操作,最後到最初呼叫的時候,然後退出。函式遞迴是棧操作的一種應用。