递归的应用

这篇博客介绍了递归的概念,通过汉诺塔问题和快速排序算法展示了递归的应用。汉诺塔代码演示了如何使用递归来解决移动磁盘的问题,而快速排序则利用递归实现了数组的高效排序。文章还提供了快速排序的C语言实现,并给出了排序后的结果。
摘要由CSDN通过智能技术生成

递归

函数递归就是函数调用自己,要设置退出条件,否则会一直运行直到耗尽内存空间

递归的应用1

汉诺塔

贴一下用python写的汉诺塔代码,思想是一致的,聪明的你肯定会把他写成C语言的代码吧,所以我就不贴代码咯。
汉诺塔代码实现

递归的应用2

快速排序
基本思想:分而治之
找一个基准数值(随便定一个,习惯是数组中间那个数),分别从左到右寻找大于基准点的数(i是下标)和从右到左寻找小于基准点的数(j是下标),然后令两个数互换,当i超过j时退出循环,此时数组分为两段,左边全部比右边小,然后对两端数组进行递归直到各数组都只有一个元素。
测试代码:

void quick_sort(int array[],int left,int right);

void quick_sort(int array[],int left,int right)
{
    int i = left,j = right;//遍历数组
    int temp;//互换的基石
    int qovit;//选择的基准值
    qovit = array[(left + right)/2];
    while(i<=j)//遍历一遍数组
    {
        while(array[i]<qovit)//选择左侧大于基准值的数就跳出循环
        {
            i++;
        }
        while(array[j]>qovit)//选择右侧大于基准值的数就跳出循环
        {
            j--;
        }
        if(i<j)//交换上面选出的两个数
        {
            temp = array[i];
            array[i] = array[j];
            array[j] = temp;
            i++;//这里注意交换后要更改指标的值,否则出不去循环,别问我怎么知道的
            j--;
        }
    }
    if(left<j)
    {
        quick_sort(array,left,j);//对左侧递归调用快速排序
    }
    if(i<right)
    {
        quick_sort(array,i,right);//对右侧递归调用快速排序
    }
}

int main(void)
{
    int array[]={111, 21, 32, 55, 2, 543, 520, 11, 23, 88};
    int length = sizeof(array) / sizeof(array[0]);
    quick_sort(array,0,length-1);
    printf("排序后的结果是:");
    for(int i=0;i < length;i++)
    {
        printf("%d ",array[i]);
    }
    return 0;
}

结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值