一、遞歸函數定義
- 在高級語言的學習中,函數調用自己和調用其他函數並沒有本質的區別,函數直接或者間接調用自己(函數本身)就稱該函數爲遞歸函數;
二、遞歸函數的特點
- 遞歸函數必須含有結束條件否則會陷入死循環;
- 遞歸比迭代會消耗大量的時間和內存,函數反覆調用返回,申請臨時內存空間;
- 調用和函數返回,遞歸的返回順序是它調用的順序的逆序;
三、遞歸實例
int factorial( n )
{
if( 0 == n )
return 1;
else
return n * factorial( n - 1 );
}
2、分別利用迭代方法和遞歸的方法求斐波那契數列
對比了兩種實現斐波那契的代碼,迭代和遞歸的區別是:迭代使用的是循環結構,遞歸使用的是選擇結構。使用遞歸能使程序的結構更清晰、更簡潔、更容易讓人理解,從而減少讀懂代碼的時間。
迭代
int main()
{
int i;
int arr[40];
arr[0]=0;
arr[1]=1;
printf("%d\n",arr[0] );
printf("%d\n",arr[1] );
for(i=2;i<40;i++)
{
arr[i]=arr[i-1]+arr[i-2];
printf("%d\n",arr[i] );
}
return 0;
}
遞歸
int fib(int i)
{
if(i<2)
return i == 0 ? 0 : 1
return Fib(i-1) + Fib(i-2);
}
3、利用遞歸方法實現字符逆序打印
編寫一個遞歸函數,實現將輸入的任意長度的字符串反向輸出的功能。
例如輸入字符串abcd則輸出字符串dcba。
void print()
{
char a;
scanf(“%c”, &a);
if( a !=‘#’)
print();
if( a !=‘#’)
printf(“%c”, a);
}
四、總結
關於遞歸切記要含有結束條件,還有就是遞歸函數調用和函數返回,遞歸的返回順序是它調用的順序的逆序;