数据结构--递归练习

来源:互联网 发布:淘宝幸福狐狸是正品吗 编辑:程序博客网 时间:2024/06/03 15:49
///////////////////////////////////////递归练习//////////////////////////////////////#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);elsereturn 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;}

0 0
原创粉丝点击