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

c语言:函数的递归调用的更多相关文章

  1. 你好,C++(27)在一个函数内部调用它自己本身 5.1.5 函数的递归调用

    5.1.5 函数的递归调用 在函数调用中,通常我们都是在一个函数中调用另外一个函数,以此来完成其中的某部分功能.例如,我们在main()主函数中调用PowerSum()函数来计算两个数的平方和,而在P ...

  2. day14 迭代器,生成器,函数的递归调用

    1.什么是迭代器 迭代是一个重复的过程,但是每次重复都是基于上一次重复的结果而继续 迭代取值的工具 2.为什么要用迭代器 迭代器的优点 ​ ①不依赖于索引取值 ​ ②更节省内存 缺点: ​ 1.不如按 ...

  3. C语言函数的递归和调用

    函数记住两点: (1)每个函数运行完才会返回调用它的函数:每个函数运行完才会返回调用它的函数,因此,你可以先看看这个函数不自我调用的条件,也就是fun()中if条件不成立的时候,对吧,不成立的时候就是 ...

  4. Java中函数的递归调用

    说到递归,java中的递归和C语言中也是很相似的,在Java中,递归其实就是利用了栈的先进后出的机制来描述的. public class HelloWorld { public static void ...

  5. C51函数的递归调用

    前几天在写C51程序时用到了递归,简单程序如下: void WRITE_ADD(uchar addr,uchar wbyte) { START(); //先发送起始信号 WRITE_BYTE(0xa0 ...

  6. [C++程序设计]函数的递归调用

    在调用一个函数的过程中又出现直接或间接地调用 该函数本身,称为函数的递归(recursive)调用. 包含递归调用的函数称为递归函数. 在实现递归时,在时间和空间上的开销比较大 求n! #includ ...

  7. python--内置函数、匿名函数、递归调用

    匿名函数 有名函数: def func1(x): print(func1) 结果: <function func1 at 0x00000000005C3E18> 匿名函数: func2=l ...

  8. [转]在C#中调用C语言函数(静态调用Native DLL,Windows & Microsoft.Net平台)

    原文:https://blog.csdn.net/yapingxin/article/details/7288325 对于不太了解.Net的人,如果想要了解.Net,我必须给他介绍P/Invoke.P ...

  9. oracle数据库中函数的递归调用

    如有下面的表结构AAAA,用一个字段prev_id表示记录的先后顺序,要对其排序,需要用的递归函数 ID PREV_ID CONT 99   a 23 54 d 21 23 e 54 33 c 33 ...

随机推荐

  1. Linux下的文件目录树结构

    Linux下的文件目录及文件结构 一.文件和文件夹 在Linux系统下,一切皆是文件.就连Linux本身也是基于文件表示的操作系统. 1.文件:文件在Linux系统之下,一般分为两种:一是一般性文件, ...

  2. windows下移植别人配置好的python环境

    一般来说,我们在windows下配置python环境的时候可能会比较推荐用anaconda,那么有一个比较方便的anaconda环境移植方法,也就是说,如果我已经在windows上安装好了anacon ...

  3. C语言小游戏: 2048.c

    概要:2048.c是一个C语言编写的2048游戏,本文将详细分析它的源码和实现.C语言是一种经典实用的编程语言,本身也不复杂,但是学会C语言和能够编写实用的程序还是有一道鸿沟的.本文试图通过一个例子展 ...

  4. windows平台上运行Flink_转载于CSDN

    Flink安装部署-window 本地部署原创冰上浮云 发布于2019-08-17 15:56:06 阅读数 633 收藏分类专栏: flink版权声明:本文为博主原创文章,遵循 CC 4.0 BY- ...

  5. oracle11g更改字符集

    一.查看服务器字符集编码三种方式:1)select userenv('language') from dual; -- 推荐2)select * from V$NLS_PARAMETERS;3)sel ...

  6. opencv+python实时人脸检测、磨皮

    import numpy as np import cv2 cap = cv2.VideoCapture(0) face_cascade = cv2.CascadeClassifier("d ...

  7. 查看mysql表空间

    ,),'MB') as data_size, concat(,),'MB') as index_size from information_schema.tables group by TABLE_S ...

  8. HTML5 新增元素梳理

    HTML5新增元素如下图: <canvas> 新元素 <canvas> 标签定义图形,比如图表和其他图像,该标签基于javascript的绘图api 新多媒体元素 <au ...

  9. 【剑指Offer】面试题07. 重建二叉树

    题目 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字. 例如,给出 前序遍历 preorder = [3,9,20,15,7] 中序遍历 ...

  10. oracle中设置主键

    1.创建表 .创建表 create table "c_user"( "id" number primary key, "username" ...