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语言自增自减运算符

posted @ 2017-03-11 08:31  言立慧  阅读(613)  评论(0编辑  收藏  举报