链表的递归
设head指向一个非空单向链表
例一:正向输出链表数据域的值
void PrintLink(ElemSN *head)
{
if(head){
printf("%d\t",head->data);
PrintLink(head->next);
}
}
例二:逆向输出单项链表数据域的值
void PrintLink(ElemSN *head)
{
if(head){
PrintLink(head->next);
printf("%d\t",head->data);
}
}
例三:返回单向链表节点的个数
int CountNode(ElemSN *head)
{
if(head)
return CountNode(head->next)+1;
else
return 0;
}
例四:返回奇数节点的个数
int CountOddNode(ElemSN *head)
{
if(head)
return CountNode(head->next)+head->data%2;
else
return 0;
}
例五:返回单向链表的最大值
int MaxValue(ElemSN *head)
{
int max;
if(!head->next)
max=head->data;
else{
max=MaxValue(head->next);
if(head->data>max)
max=head->data;
}
return max;
}
例五:返回单向链表的最大值节点的指针
int MaxNode(ElemSN *head)
{
ElemSN *max;
if(!head->next)
max=head;
else{
max=MaxNode(head->next);
if(head->data>max->data)
max=head;
}
return max;
}
数组的递归
设有数组a[n]
例一:正向输出所有元素的值
void PrintArry(int a[],int n)
{
if(n){
printf("%d"\t,*a);
PrintArry(a+1,n-1)
}
}
例二:逆向输出所有元素的值
void PrintArry(int a[],int n)
{
if(n){
PrintArry(a+1,n-1);
printf("%d\t",*a);
}
}
例三:返回所有元素之和
int ArrySum(int a[],int n)
{
if(n){
return *a+ArraySum(a+1,n-1);
}
else return 0;
}