一、什么是遞歸函數
- 遞歸函數:函數中調用了自己的函數
- 遞歸函數不等于循環(huán)函數,
- 遞歸典型例子:用遞歸函數計算階乘、求斐波那契數列
#include <stdio.h>
int main(void)
{
int a=5;
printf("%d的階乘是:%d.\n",a,jiecheng(a));
return 0;
}
int jiecheng(int n)
{
if(n<1)
{
printf("n必須大于等于1.\n");
return -1;
}
if(n==1)
{
return 1;
}
else
{
return (n*jiecheng(n-1));
}
}
二、函數的遞歸調用原理
- 實際上遞歸函數是在棧內存上遞歸執(zhí)行的,每次遞歸執(zhí)行一次就會耗費一些棧內存。
- 棧內存的大小是限制遞歸深度的重要因素。
三、使用遞歸函數的原則:收斂性、棧溢出
- 收斂性就是:遞歸函數必須有一個終止遞歸的條件。當每次函數被執(zhí)行時,判斷一個條件決定是否繼續(xù)遞歸,這個條件最終必須能夠被滿足。如果沒有遞歸終止條件或者這個條件永遠不會被滿足,則這個遞歸沒有收斂性。
- 因為遞歸是占用棧內存的,必須在棧內存耗盡之間結束遞歸。否則就會棧溢出。
- 遞歸函數的使用具有一些風險,必須把握好終止條件。