C语言函数的递归
文章目錄
- 一、遞歸函數的定義
- 二、函數調用機制說明
- 三、遞歸調用的形式
一、遞歸函數的定義
所謂遞歸函數是指一個函數的函數體中直接調用或間接調用了該函數自身的函數。
遞歸函數調用的執行過程分為兩個階段。
遞推階段:從原問題出發,按遞歸公式遞推從未知到已知,最終達到遞歸終止條件。
回歸階段:按遞歸終止條件求出結果,逆向逐步代入遞歸公式,回歸到原問題求解。
示例程序如下:
程序執行結果如下:
5!=120.000000該程序實現了n!,已知0!或1!是1。遞歸規律是:n!=n×(n-1)!。
二、函數調用機制說明
任何函數之間不能嵌套定義,調用函數與被調用函數之間相互獨立(彼此可以調用)。發生函數調用時,被調函數中保護了調用函數的運行環境和返回地址,使得調用函數的狀態可以在被調函數運行返回后完全恢復,而且該狀態與被調函數無關。
被調函數運行的代碼雖是同一個函數的代碼體,但由于調用點,調用時狀態,返回點的不同,可以看作是函數的一個副本,與調用函數的代碼無關,所以函數的代碼是獨立的。被調函數運行的棧空間獨立于調用函數的棧空間,所以與調用函數之間的數據也是無關的。函數之間靠參數傳遞和返回值來聯系,函數看作為黑盒。
三、遞歸調用的形式
遞歸調用有直接遞歸調用和間接遞歸調用兩種形式。
直接遞歸即在函數中出現調用函數本身。
而其他函數又調用了本函數,這一過程稱間接遞歸。
void a() (b();/*函數a中調用函數b*/} void b() (a();/*函數b中調用函數a-間接遞歸*/ )總結
- 上一篇: 高地址和低地址、高字节低字节、大小端模式
- 下一篇: 如何做相册_手机里的照片太多,不得已只能