直接或間接地呼叫自身的演算法稱為遞迴演算法。用函式自身給出定義的函式稱為遞迴函式。使用遞迴技術往往會使**更簡潔,使演算法的描述更清晰且容易理解。
例 1:階乘函式
階乘函式遞迴的定義為:
當n=0時,n!=1,這是這個函式的初始條件,是非遞迴定義的,是此遞迴函式的退出條件。這個遞迴函式在執行時,會不斷的呼叫自身,尋找自身的值減一後的階乘值,直到自身值減一為0時,此時函式遞迴到了最後一層(即非遞迴定義的退出條件),這時n=0的階乘為1,然後層層回滾,計算出n=1的階乘的值後,再去計算n=2時階乘的值,這樣一直不斷的計算n+1階乘的值,直到回滾到初始的n的階乘的值。
每乙個遞迴函式都要有非遞迴定義的初始值,不然無法退出函式呼叫的迴圈。
**如下:例 2:斐波那契數列無窮數列 1, 1, 2, 3, 5 ,…稱為斐波那契數列,它具有前兩項之和等於後一項的特點。它可以遞迴的定義為:執行結果:#includeusing namespace std;
int sum = 0; //定義全域性變數sum,用於記錄函式呼叫自身的次數
//使用 long long 型別的返回值,防止n的階乘的值過大,超出了int型的範圍
long long fac(int n)
int main()
結果分析:
最開始傳值的時候即n=8時進入函式,sum自增後為1。此後,進入else分支,進行遞迴,再次進入函式時n=7。依此類推,最後一次進入函式時n=0,而n=0恰好是此遞迴函式的初始條件,自此不再呼叫自身。故此可以看出初始條件是遞迴函式所必需的要有的,不然無法退出迴圈。當n=8,7,6,5,4,3,2,1,0時都進入過函式,故sum累加值為9。
**如下:#includeusing namespace std;
int sum = 0; //記錄函式呼叫的次數
int fibonacci(int n)
int main()
{ int n;
cin >> n;
cout << "斐波那契數列的第" << n <
結果分析:
n=3時進入函式一次(sum=1),執行遞迴項為fibonacci(1)和fibonacci(2)。執行fibonacci(1)時(sum=2),直接返回結果1,不再遞迴。而執行fibonacci(2)時(此時sum=3),執行遞迴項fibonacci(1)和fibonacci(0),執行完後sum=3+2=5。故共呼叫函式5次。
函式的遞迴過程
函式的遞迴就是函式通過自己迴圈呼叫自己來完成某項功能,我們在自定義函式的時候也經常會用到遞迴功能,那麼當函式在進行遞迴的時候內部過程都有哪些呢?我們以這個程式為例 age int n else tmp age n 1 2 return tmp 函式的遞迴就是函式通過自己迴圈呼叫自己來完成某項功能,我...
遞迴函式的基本概念
遞迴函式說白了就是乙個自己呼叫自己的函式 比方說def print num num if num 10 這是跳出的條件 return 這是跳出的位置 else print num num 1 print num num 再次呼叫自己 print num 1 這就算是乙個簡單的遞迴函式,依次列印1 1...
函式遞迴的呼叫過程
函式遞迴的呼叫過程 當函式n 5時,fact n 1 時要呼叫n 4,所以依次呼叫,上圖所示就是函式的呼叫,當n 0時返回到n 1一直到n 5的函式呼叫 例項解析 字串反轉 將字串s反轉後輸出,s 1 將列表中,從頭到尾以 1的步長輸出,而 1的步長就是指從後往前輸出 函式 分支結構 遞迴鏈條 遞迴...