函式的遞迴就是函式通過自己迴圈呼叫自己來完成某項功能,我們在自定義函式的時候也經常會用到遞迴功能,那麼當函式在進行遞迴的時候內部過程都有哪些呢?
我們以這個程式為例:
age(int n)
else
tmp=age(n-1)+2
return tmp;
}
函式的遞迴就是函式通過自己迴圈呼叫自己來完成某項功能,我們在自定義函式的時候也經常會用到遞迴功能,那麼當函式在進行遞迴的時候內部過程都有哪些呢?
我們以這個程式為例:
這個程式的遞迴功能主要是後一項為前一項加2,利用
for迴圈也可以很容易的解決,不過我們不看程式內容只看它執行的過程,假使我們讓引數
n=4進入函式,先經過
if的判斷你n!
=1,執行
else
,這時候就會面臨乙個問題:我們並不知道
age(
n-1)的值。於是我們建立乙個棧,先將
age(
4)的值置入棧底,然後繼續求
age(
3)的值,經過相似的過程後,我們可以將
age(3)和
age(
2)按順序置入棧底,完成之後的
n就應該等於
1了,執行
if判斷,終於有了第乙個返回值
10,於是就可以返回
age(
2),將它從棧頂取出並執行後面的語句,得到
age(2)
=12,再取出
age(
3),執行函式得到
age(3)
=14,取出
age(
4),這時候的棧已經為空,我們就也可以將
tmp
返回age(4
)=16
了。具體過程如下圖:
在這個過程中n總共進行了三次遞迴,遞迴的進行次數其實是由遞迴函式的邊界所決定的,這個程式中的函式邊界就是if(
n==1
)return 10
;如果沒有遞迴邊界,函式的遞迴就會一直進行下去,形成乙個死迴圈。
棧的儲存也是遞迴過程中乙個十分重要的過程,它的存在使得我們可以儲存一些臨時變數,同時方便對他們進行取出,不過需要注意的是,棧的大小一般是1mb左右,我們在遞迴的時候也要注意遞迴次數的限定。
遞迴的概念 函式遞迴過程
直接或間接地呼叫自身的演算法稱為遞迴演算法。用函式自身給出定義的函式稱為遞迴函式。使用遞迴技術往往會使 更簡潔,使演算法的描述更清晰且容易理解。例 1 階乘函式 階乘函式遞迴的定義為 當n 0時,n 1,這是這個函式的初始條件,是非遞迴定義的,是此遞迴函式的退出條件。這個遞迴函式在執行時,會不斷的呼...
函式遞迴的呼叫過程
函式遞迴的呼叫過程 當函式n 5時,fact n 1 時要呼叫n 4,所以依次呼叫,上圖所示就是函式的呼叫,當n 0時返回到n 1一直到n 5的函式呼叫 例項解析 字串反轉 將字串s反轉後輸出,s 1 將列表中,從頭到尾以 1的步長輸出,而 1的步長就是指從後往前輸出 函式 分支結構 遞迴鏈條 遞迴...
python遞迴函式的執行過程
舉例 def nove n,a,b,c if n 1 print a,c else nove n 1,a,c,b nove 1,a,b,c nove n 1,b,a,c 執行輸出結果 nove 3,a b c a c a b c b a c b a b c a c 執行過程詳解 1 def nove...