链表与数组的递归

链表的递归

设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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值