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;
}
}
else
return 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);
}
}
else
return -1;}
7.逆序打印数组中的元素
void ReversePrintArray(int* arr,int size)
{
assert(arr);
if(size!=0)
{
cout<<arr[size-1]<<" ";
ReversePrintArray(arr,size-1);
}
else
cout<<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);
}
else
return false;
}
else
return 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);
}
}