几道典型的递归算法例题

来源:互联网 发布:淘宝千人千面影响 编辑:程序博客网 时间:2024/05/17 04:11

1.求前N个自然数之和

int Sum(int n){if(n==1)return 1;return n+Sum(n-1);}
2.求N的阶乘

int Factorial(int n){if(n==1)return 1;return n*Factorial(n-1);}

3.逆序打印单链表

struct Node{Node* _next;int value;};void  ReversedPrint(Node* pHead){if(pHead==NULL)return ;if(pHead){ReversedPrint(pHead->_next);cout<<pHead->value<<" ";}}

4.逆序销毁单链表

struct Node{Node* _next;int value;};void Destory(Node*& pHead){if(pHead==NULL)return ;if(pHead){Destory(pHead->_next);pHead=NULL;}}

5.在单链表中逆序查找某个值为data的结点

struct Node{Node* _next;int value;};Node* ReversedFind(Node* pHead,int data){if(pHead){Node* pcur=ReversedFind(pHead->_next,data);if(pcur)return pcur;else{if(pHead->value==data)return pHead;}}elsereturn NULL;}

6.二分查找递归形式

int BinarySearch(int* arr,int left,int right,int data){assert(arr);if(left<=right){int mid=(left&right)+((left^right)>>1);if(arr[mid]==data){return mid;}else if(arr[mid]>data){return BinarySearch(arr,left,mid-1,data);}else{return BinarySearch(arr,mid+1,right,data);}}elsereturn -1;}

7.逆序打印数组中的元素

void ReversePrintArray(int* arr,int size){assert(arr);if(size!=0){cout<<arr[size-1]<<" ";ReversePrintArray(arr,size-1);}elsecout<<endl;}

8.判断一个字符串是否为回文

bool IsPalindereme(char* str,int left,int right){assert(str);if(left<right){if(str[left]==str[right]){return IsPalindereme(str,left+1,right-1);}elsereturn false;}elsereturn true;}

9.研究Perm是怎么调用的,并给出其时间复杂度

void Print(int* arr,int size){for(int i=0;i<size;i++){cout<<arr[i]<<" ";}cout<<endl;}void Perm(int* arr,int size,int n){assert(arr);if(n<size){for(int i=n;i<size;i++){swap(arr[n],arr[i]);//Print(arr,size);Perm(arr,size,n+1);swap(arr[n],arr[i]);}}else{Print(arr,size);}}


0 0
原创粉丝点击