1. 递归逆序打印字符串
void reverse(char *s)
{
if(*s != �)
{
reverse(++s);
putchar(*(s-1)); // 巧妙的利用栈的先进后出的特点!
}
}
2. 递归方式将链表逆序
// p 为指向非空单链表中第一个结点的指针,本算法逆转链表并返回逆转后的头指针。基本思路是:如果链表中只有一个结点,则空操作,否则先逆转a2开始的链表,然后将 a1联接到逆转后的链表的表尾(即a2)之后。
LinkList reverse(LinkList p)
{
if(p->next == NULL) return p; // 链表中只有一个结点,逆转后的头指针不变
else
{
q = p->next; // q为链表(a2,…an)的头指针
h = reverse(q); // 逆转链表(a2,…an),并返回逆转后的头指针
q->next = p; // 将a1联接在a2之后
p->next = NULL;
return h; // (a2,…,an)逆转表的头指针即为(a1,a2,…,an)
}
}
3. 递归方式合并两个链表
Node * MergeRecursive(Node *head1 , Node *head2)
{
if ( head1 == NULL )
return head2 ;
if ( head2 == NULL)
return head1 ;
Node *head = NULL ;
if ( head1->data < head2->data )
{
head = head1 ;
head->next = MergeRecursive(head1->next,head2);
}
else
{
head = head2 ;
head->next = MergeRecursive(head1,head2->next);
}
return head ;
}