標籤: 暫無標籤

遞歸調用是一種特殊的嵌套調用,是某個函數調用自己,而不是另外一個函數。遞歸調用一種解決方案,一種是邏輯思想,將一個大工作分為逐漸減小的小工作,比如說一個和尚要搬50塊石頭,他想,只要先搬走49塊,那剩下的一塊就能搬完了,然後考慮那49塊,只要先搬走48塊,那剩下的一塊就能搬完了……,遞歸是一種思想,只不過在程序中,就是依靠函數嵌套這個特性來實現了。

1基本信息

英文
recursive invocation
C語言中的遞歸
計算階乘的代碼
long fact(long n)
{
if(n==0||n==1) return 1L;
else return n*fact(n-1);
}
這個函數叫做fact,它自己調用自己,這個就是一個典型的遞歸調用,調用過程類似一個棧。
注: 主調函數又是被調函數。執行遞歸函數將反覆調用其自身。 每調用一次就進入新的一層。
int f (int x)
{
int y;
z=f(y);
return z;
} 這個函數是一個遞歸函數。 但是運行該函數將無休止地調用其自身,這當然是不正確的。為了防止遞歸調用無終止地進行, 必須在函數內有終止遞歸調用的手段。常用的辦法是加條件判斷, 滿足某種條件后就不再作遞歸調用,然後逐層返回。 下面舉例說明遞歸調用的執行過程。
c++語言中的遞歸
#include<iostream>
using namespace std;
int fac(int n)
{
int s=1;
for (int i=n;i>0;i--)
{
if (s<=s*i) s=s*i;
else
{
cout<<"over int area"<<endl;
return 0;
};
}
return s;
}
void main()
調用前
一個函數的運行期間調用另一個函數時,在運行被調用函數之前,系統需要完成3件事情:
(1)將所有的實參、返回地址等信息傳遞給被調用函數保存;
(2)為被調用函數的局部變數分配存儲區;
(3)將控制轉移到被調函數的入口。
遞歸函數的特點
所有遞歸函數的結構都是類似的。
(1)函數要直接或間接調用自身。
(2)要有遞歸終止條件檢查,即遞歸終止的條件被滿足后,則不再調用自身函數。
(3)如果不滿足遞歸終止的條件,則調用涉及遞歸調用的表達式。在調用函數自身時,有關終止條件的參數要發生變化,而且需向遞歸終止的方向變化。

總結

函數的調用原則和數據結構棧的實現是相一致。也說明函數調用是通過棧實現的。

相關評論

同義詞:暫無同義詞