代碼:C語言中的遞歸函數

【宏思微想:科技生活,技術開發】

定義:函數直接或間接的調用自己,叫做遞歸函數。

特點:

1. 直接或間接調用函數自身。

2. 必須有終止執行的條件,即遞歸終止的條件被滿足後,則不再調用自身函數。

3. 如果不滿足終止執行的條件,則調用涉及遞歸調用的表達式。在調用函數自身時,有關終止條件的參數要發生變化,而且需向遞歸終止的方向變化。

遞歸函數的寫法?

1. 普通遞歸

以階乘為例:

int Factorial(int n)

{

if(0==n || 1==n)

return 1;

else

return n * Factorial(n-1);

}

2. 尾部遞歸:遞歸函數最後一件事情是做遞歸調用。普通遞歸改為尾部遞歸的常見方法是將當前的運算結果傳入下一次遞歸中。

以階乘為例:

int Factorial(int n, int update)

{

if(0==n || 1==n)

return update;

else

return Factorial(n-1, n*update);

}

遞歸函數的優點?

邏輯清晰,代碼簡潔。

遞歸函數的缺點?

1. 效率較低。反覆調用函數,壓棧出棧,時間開銷上會有所遞增。

2. 棧開銷大,容易爆棧。每一次遞歸調用都會分配新的棧空間,所以棧的開銷會隨著遞歸的次數而遞增。解決辦法是使用尾部遞歸。尾部遞歸在調用遞歸函數時,當前函數的棧已不需要,可直接釋放掉,因此尾部遞歸函數可以在固定大小的棧中執行。但這需要編譯器的棧管理支持對尾部遞歸的這種優化。

遞歸函數的常用場合?

數學運算,工程運算等一切可抽象歸納出規律性的場合。理論上,循環和遞歸可以相互轉化。

代碼:C語言中的遞歸函數

——————(完)——————

相關推薦

推薦中...