zoukankan      html  css  js  c++  java
  • c语言:函数的递归调用

    c语言可以将代码模块化,这是其很重要的一个特性。
    说道代码模块化,我们很自然的就会联想到函数。而函数中,比较难的一个知识点就是函数的递归调用。
    值得注意的是,函数的递归调用在现实工作并不是很常用,但是涉及到算法或者是学校的考试的话,那这个知识点就成了必考的内容。所以,骚年,躲是躲不掉滴~~
    好了,言归正传,首先,我们通过一个例子来具体看一下函数的递归调用。
    例如,大家假期结束返回学校,生活费肯定是不可少的,什么?你说你不用生活费?原谅我不知道你是怎么活下来的……
    于是,你就问A室友带了多少生活费,舍友A回答说,他比B多带了200块钱;于是你又去问B,B说他C同学多带了200块钱;于是你就去问C,C说他比D同学多带了200块钱;于是你只好又去问D,D说他比E同学多带200块钱,最终你得知E同学实际上带了1000块钱,那么请问A同学带了多少钱?
    观察这道题,我们很容易的就可以解出A到底带了多少钱,但是,我们现在需要用代码的方式来解决这个问题。
    我们看,这其实就是一个递归的问题。我们要求出A究竟带了多少钱,势必要从E同学的钱数上一层层的加200元,最终得出A的生活费。
    也就是:

    money(5)=money(4)+200;
    money(4)=money(3)+200;
    money(3)=money(2)+200;
    money(2)=money(1)+200;
    money(1)=1000;

    这个过程其实可以分成两个阶段。第一个阶段是回流,就是说我向计算机输入一个值5,我是想得出A同学的钱数,但在此之前我必须找到B同学的钱数,以此类推,我必须得到具体的钱数,才能够停止回流的这个过程,也就是得到E同学的钱数1000元;第二个阶段就是计算了,得到了E同学的钱数之后,我们需要让E同学的钱数依次加上200,最终得出结果。
    接下来我们用一个代码片段来实现这个过程:

    int money(int n)
    {
        int c;
        if (n == 1)
            c = 1000;
        else
            c = money(n - 1) + 200;
        return  c;
    }

    可以看到,根据我们上面的理论,这个money函数一共被调用了4次。注意:这都是在函数内部的调用,一个函数调用一个函数,直到n的值为1的时候停止,所以最后需要加的是800,然后返回最终的结果。
    这就是我们讲的函数的递归调用,也就是函数本身调用自己。但是应用递归调用的时候,我们有必要设置一个条件,也就是if语句,目的是能够让这个函数停下来,否则程序将进入到死循环,一般不是我们想看到的。
    我们可以自己尝试一下n!的解题方法,我就不给出了,大家可以尝试一下!
    同为小白,愿与诸君共勉!

    附上我的另一篇文章:c语言自增自减运算符

    结语

    感谢您的阅读,欢迎指正博客中存在的问题,也可以跟我联系,一起进步,一起交流!

    微信公众号:进击的程序狗
    邮箱:roobtyan@aliyun.com
    个人博客:https://roobtyan.github.io

  • 相关阅读:
    2016/07/05 配置虚拟域名 三部曲
    sublime下Docblocker插件自定义配置
    掌握Thinkphp3.2.0----标签库
    掌握Thinkphp3.2.0----内置标签
    掌握Thinkphp3.2.0----模版基础
    掌握Thinkphp3.2.0----视图
    掌握Thinkphp3.2.0----自动完成
    掌握Thinkphp3.2.0----自动验证
    掌握Thinkphp3.2.0----CURD
    掌握Thinkphp3.2.0----连贯操作
  • 原文地址:https://www.cnblogs.com/roobtyan/p/9576738.html
Copyright © 2011-2022 走看看