數據結構——遞歸學習

一、遞歸函數定義

  1. 在高級語言的學習中,函數調用自己和調用其他函數並沒有本質的區別,函數直接或者間接調用自己(函數本身)就稱該函數爲遞歸函數;

二、遞歸函數的特點

  1. 遞歸函數必須含有結束條件否則會陷入死循環;
  2. 遞歸比迭代會消耗大量的時間和內存,函數反覆調用返回,申請臨時內存空間;
  3. 調用和函數返回,遞歸的返回順序是它調用的順序的逆序;

三、遞歸實例


1、利用遞歸算法求n的階乘
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);
}


四、總結

關於遞歸切記要含有結束條件,還有就是遞歸函數調用和函數返回,遞歸的返回順序是它調用的順序的逆序;



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章