遞迴的概念 函式遞迴過程

2021-09-29 06:45:44 字數 1565 閱讀 7801

直接或間接地呼叫自身的演算法稱為遞迴演算法。用函式自身給出定義的函式稱為遞迴函式。使用遞迴技術往往會使**更簡潔,使演算法的描述更清晰且容易理解。

例 1:階乘函式

階乘函式遞迴的定義為:

當n=0時,n!=1,這是這個函式的初始條件,是非遞迴定義的,是此遞迴函式的退出條件。這個遞迴函式在執行時,會不斷的呼叫自身,尋找自身的值減一後的階乘值,直到自身值減一為0時,此時函式遞迴到了最後一層(即非遞迴定義的退出條件),這時n=0的階乘為1,然後層層回滾,計算出n=1的階乘的值後,再去計算n=2時階乘的值,這樣一直不斷的計算n+1階乘的值,直到回滾到初始的n的階乘的值。

每乙個遞迴函式都要有非遞迴定義的初始值,不然無法退出函式呼叫的迴圈。

**如下:

#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。

例 2:斐波那契數列無窮數列 1, 1, 2, 3, 5 ,…稱為斐波那契數列,它具有前兩項之和等於後一項的特點。它可以遞迴的定義為:

**如下:

#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的步長就是指從後往前輸出 函式 分支結構 遞迴鏈條 遞迴...