數據結構--遞歸練習

///////////////////////////////////////遞歸練習//////////////////////////////////////
#include<iostream>
using namespace std;

//求前N個自然數之和
int Sum(int N)
{
	if(N == 1)
		return 1;
	return Sum(N-1)+N;
}

//求N的階乘
int Fac(int N)
{
	if(N == 0)
		return 1;
	return Fac(N-1)*N;
}

typedef struct Node
{
	Node(int data)
		:_data(data)
		,_next(NULL)
	{}
	int _data;
	struct Node* _next;
}Node;
//逆序打印單鏈表
void PrintFromTail2Head(Node* pHead)
{
	if(pHead)
	{
		PrintFromTail2Head(pHead->_next);
		cout<<pHead->_data<<" ";
	}
}

//逆序銷燬單鏈表
void Destroy(Node*& pHead)
{
	if(pHead)
	{
		Destroy(pHead->_next);
		delete pHead;
		pHead = NULL;
	}
}

//在單鏈表中逆序查找某個值爲data的結點
Node* FindFromTail(Node* pHead, size_t data)
{
	if(pHead)
	{
		if(pHead->_data == data)
			return pHead;

		return FindFromTail(pHead->_next, data);
	}
	return NULL;

}
//二分查找遞歸形式
int BinarySeach(int arr[], int left, int right, int key)
{
	int mid = left + (right - left);
	if(left < right)
	{
		if(arr[mid] == key)
			return arr[mid];
		else if(arr[mid] > key)
			return BinarySeach(arr, left, mid-1, key);
		else
			return BinarySeach(arr, mid+1, right, key);
	}
	return -1;
}
//逆序打印數組中的元素
void PrintFromTail(int arr[], int size)
{
	if(size)
	{
		cout<<arr[size-1]<<" ";
		PrintFromTail(arr, size-1);		
	}
}

//判斷一個字符串是否爲迴文
bool IsPalindrome(char* str, size_t size)
{
	if(size <= 1)//遞歸出口 當只有一個字符退出
		return true;
	if(str[0] != str[size-1])//或當前字符串中第一個和最後一個不等就退出
		return false;
	/*return */IsPalindrome(++str, size-2);//遞歸
}



int main()
{
	/*char* str = "12321";
	int size = strlen(str);
	cout<<IsPalindrome(str, size)<<endl;*/

	//int arr[] = {1,2,3,4,5,6,7,8,9};
	//cout<<BinarySeach(arr, 0, 4, 3)<<endl;

	//int size = sizeof(arr)/sizeof(arr[0]);
	//PrintFromTail(arr, size);


	/*Node* p;
	Node* p1 = new Node(1);
	Node* p2 = new Node(2);
	Node* p3 = new Node(3);
	Node* p4 = new Node(4);
	p1->_next = p2;
	p2->_next = p3;
	p3->_next = p4;

	p = FindFromTail(p1,3);*/
	
	//Destroy(p1);
	//PrintFromTail2Head(p1);
	//cout<<endl;
     
	

	//cout<<Sum(5)<<endl;
	//cout<<Fac(3)<<endl;
	system("pause");
	return 0;
}

發佈了62 篇原創文章 · 獲贊 14 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章