C语言:函数的递归调用

函数的递归调用:一个函数在它的函数体内,直接或者间接地调用了他本身。

直接递归调用:函数直接调用自身。                              间接递归调用:函数间接调用自身。

如下图:                                                                          如下图:

     防止递归无休止的进行下去,必须在函数内加条件判断,满足条件后就不再做递归调用,然后逐层返回。

通过一个例子来了解函数的递归调用

例:求第五个学生的年龄。

问第五个学生,说他比第四个学生大两岁

第四个学生说他比第三个学生大两岁

第三个学生说他比第二个学生大两岁

第二个学生说他比第一个学生大两岁

第一个说他10岁

解:

可以用如下方法求解

#include<stdio.h>
int Age (int n)
{
	int tmp;
	tmp=10;
	for(int i=1;i<n;i++)
	{
		tmp+=2;
	}
	return tmp;
}
*/
//递归法
int Age(int n)
{
	int x;
	if(n==1)      //是递归停止的条件,当n=1时停止递归调用
	{
		x=10;
	}
	else
	{
		x=Age(n-1)+2;//调用自身的Age函数
		return x;
	}
		//return (Age(n-1)+2);
}
int main()
{
	printf("%d\n",Age(5));
	return 0;
}

可知:Age函数被调用了四次。在函数内部的调用,一个函数调用一个函数,直到n为1时为止,所以最后要加的值是8,然后返回最终的值。

函数的递归调用,就是函数本身调用自己。但是应用递归调用的时候,我们有必要设置一个条件,也就是if语句,目的是能够让这个函数停下来,否则程序将进入到死循环。

最适合使用递归法解决的问题

汉诺塔问题(Hanoi)    (见下一篇博客)

最不适合使用递归法解决的问题

斐波那契数列(Fibon)

 

 

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值