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
c语言:函数的递归调用的更多相关文章
- 你好,C++(27)在一个函数内部调用它自己本身 5.1.5 函数的递归调用
		5.1.5 函数的递归调用 在函数调用中,通常我们都是在一个函数中调用另外一个函数,以此来完成其中的某部分功能.例如,我们在main()主函数中调用PowerSum()函数来计算两个数的平方和,而在P ... 
- day14 迭代器,生成器,函数的递归调用
		1.什么是迭代器 迭代是一个重复的过程,但是每次重复都是基于上一次重复的结果而继续 迭代取值的工具 2.为什么要用迭代器 迭代器的优点  ①不依赖于索引取值  ②更节省内存 缺点:  1.不如按 ... 
- C语言函数的递归和调用
		函数记住两点: (1)每个函数运行完才会返回调用它的函数:每个函数运行完才会返回调用它的函数,因此,你可以先看看这个函数不自我调用的条件,也就是fun()中if条件不成立的时候,对吧,不成立的时候就是 ... 
- Java中函数的递归调用
		说到递归,java中的递归和C语言中也是很相似的,在Java中,递归其实就是利用了栈的先进后出的机制来描述的. public class HelloWorld { public static void ... 
- C51函数的递归调用
		前几天在写C51程序时用到了递归,简单程序如下: void WRITE_ADD(uchar addr,uchar wbyte) { START(); //先发送起始信号 WRITE_BYTE(0xa0 ... 
- [C++程序设计]函数的递归调用
		在调用一个函数的过程中又出现直接或间接地调用 该函数本身,称为函数的递归(recursive)调用. 包含递归调用的函数称为递归函数. 在实现递归时,在时间和空间上的开销比较大 求n! #includ ... 
- python--内置函数、匿名函数、递归调用
		匿名函数 有名函数: def func1(x): print(func1) 结果: <function func1 at 0x00000000005C3E18> 匿名函数: func2=l ... 
- [转]在C#中调用C语言函数(静态调用Native DLL,Windows & Microsoft.Net平台)
		原文:https://blog.csdn.net/yapingxin/article/details/7288325 对于不太了解.Net的人,如果想要了解.Net,我必须给他介绍P/Invoke.P ... 
- oracle数据库中函数的递归调用
		如有下面的表结构AAAA,用一个字段prev_id表示记录的先后顺序,要对其排序,需要用的递归函数 ID PREV_ID CONT 99 a 23 54 d 21 23 e 54 33 c 33 ... 
随机推荐
- POJ 2309:BST lowbit
			BST Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9140 Accepted: 5580 Description C ... 
- Spark tungsten 项目阅读笔记
			Spark tungsten 项目阅读笔记 Spark tungsten 项目的宣言就是:Bringing Apache Spark closer Bare Metal. 我的理解就是不要让硬件成为S ... 
- Asp.net mvc+EF+Sql Server2008数据库缓存依赖
			1.开启数据库缓存依赖功能(开启对数据库中表Article和ArticleType的缓存) (注:)如果要配置SqlCacheDependency,则需要以命令行的方式执行. aspnet_regsq ... 
- Vulkan 之 Layers
			Layers 暴露给api层,不像传统图形API集成在驱动里面,开发者根据自己的需要进行开启,最终目的还是为了提高性能. The Loader he loader is the central arb ... 
- 二十八、SAP中通过以字段以表格形式输出
			一.重点在与表格长度的计算,以及LINE-SIZE的用法,代码如下 二.输出效果如下 
- java开发  中台
			中台就是接入层啊,一般有中台的都是比较大的项目,后台会分为很多模块,比如订单模块,比如会员模块,接入层需要做的就是对数据的封装,权限的过滤,以及各种安全什么的, 前台需要什么数据,接入层去对应的后台微 ... 
- Android Studio真机调试安装以后打开闪退,打包APK再安装正常打开没有问题
			一直真机调试都没有问题, 但是有一次开始,真机调试正常安装没有问题,但是一打开就崩溃了一眨眼间就像被光闪了一下的那种. oppoR11调试会这样,但是用魅族试过没有问题, 报错出现过Android S ... 
- idea自定义快捷鍵
			一 生成方法注释 1. File -> Settings... 2. Editor -> Live Templates,点击最右边的+ 3. 依自己情况选择,我这里选择的 Live Te ... 
- Maccms后门分析复现(并非官网的Maccms){10.15  第二十二天}
			该复现参考网络中的文章,该漏洞复现仅仅是为了学习交流,严禁非法使用!!!! Maccms官网:http://www.maccms.cn/ Maccms网站基于PHP+MYSQL的系统,易用性.功能良好 ... 
- 2020牛客寒假算法基础集训营4 G音乐鉴赏
			题目描述 作为“音乐鉴赏”课的任课老师,你的课程作为刷学分好课一直受到广泛欢迎.但这一学期,学校制定了新的标准,你的课的优秀率(分数超过90分的人数)被限制在10%以下! 为了应对这个调整,你要求所有 ... 
