美文网首页
零基础小白必学C语言经典算法之一—递归算法

零基础小白必学C语言经典算法之一—递归算法

作者: 楚乔_0a40 | 来源:发表于2018-06-01 23:42 被阅读0次

    1.递归

    一个函数自己直接或间接调用自己。

    思想就是:将问题规模不断缩小,化繁为简,求n!转化成(n-1)!,再转换成(n-2)!.......最后转换成(1)!.

    有如汉诺塔问题,如果初始有10个砝码,要从A移动到C,这个看起来比较复杂。只要把前9个移动到B,然后移

    动第10个到C。那这9个怎么移动呢,也用这种方式。。。这就是递归实现汉诺塔。

    现在我们来看一个简单的递归算法:C语言实现汉诺塔

    递归算法的精髓是一层入一层,直至遇到满足的结束语句,所以一般和递归在一起的是一些判断语句。递归函数得要有终止语句。

    遇到递归问题需要根据规律解决。

    (1)找到所谓的终止条件,即让递归停止的条件

    (2)找到递推的关系式

    (3)递归的方向要搞清楚,一般是向最终的终止条件不断递归

    (4)递归 分为回推和递推两个阶段,当递推到终止条件时,程序会反向推回(回推)!!!!

    用递归算法(recursion)计算阶乘

    codes:

    /**************************************

    *author: Yang Xu

    *goals: compute factorial by recursion

    ***************************************/

    #include

    #include

    int main()

    {

    /*print the result of factorial*/

    printf("%d\n", f(5));

    system("pause");

    return 0;

    }

    int f(int n)

    {

    int x;

    /*这里就不加关于负整数的判断了*/

    if(n==1||n==0)

    x=1;

    else

    x=n*f(n-1);//the recursion

    return x;

    }

    例题

    有5个人坐在一起,问第5个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第3个人,又说比第2人大两岁。问第2个人,说比第1个人大两岁。最后 问第1个人,他说是10岁。请问第5个人多大?

    程序分析:

    利用递归的方法,递归分为回推和递推两个阶段。要想知道第5个人岁数,需知道第4人的岁数,依次类推,推到第1人(10岁),再往回推。

    #include

    /*

    * 请使用递归函数完成本题

    * 小编已将正确代码放在左侧任务的“不知道怎么办”里

    * 小编希望各位童鞋独立完成哦~

    */

    //定义一个函数,传送人员序号进去,返回该序号员工的年龄。

    int getAge(numPeople)

    {

    //定义返回的年龄

    int age;

    //如果是第1个人的时候,年龄为10岁

    if(numPeople==1)

    age=10; //这是回推墙,也就是结束递归的条件。

    else

    //还没接触到回推墙,就自我调用,谓之递归。

    age = getAge(numPeople-1)+2; //年龄等于上一个人的年龄加2

    return age;

    }

    int main()

    {

    printf("第5个人的年龄是%d岁", getAge(5));

    return 0;

    }

    小编推荐一个学C语言/C++的学习裙【 六四二,一二零,九一四 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!学习更多C/C++相关知识也可以去公众号——“huainian_c”。

    2. 善用递归:

    使用递归有利有弊,有点自然是为某些问题提供了简单的解决办法,同时,代码看起来也很简洁;而缺点也不容忽视,很多递归会很快耗尽计算机的内部资源。分分钟电脑死机。

    正因为如此,很多递归我们都可以使用非递归来代替,比如下面我们求两个整数的最大公约数:

    3.结束语

    现在的程序设计追求的就是可读性好,递归的算法看起来简洁。随着计算机性能的不断提高,程序在更多的场合是优先考虑可读性,因此,如果可以,鼓励使用递归优先实现程序思想。

    每天进步一点点,每天消化一点点。如果你有更高的想法,欢迎一起交流。如果觉得文章写得还不错,点个赞呗。

    相关文章

      网友评论

          本文标题:零基础小白必学C语言经典算法之一—递归算法

          本文链接:https://www.haomeiwen.com/subject/tbjlsftx.html