C语言——递归的使用

  • 递归:
    在调用一个函数的过程中,又出现之间或间接调用函数本身的过程就叫做递归。
  • 递归函数优点:
    在函数的使用中,使代码更加简洁,高效。对待一些算法,有很好的效果。如:汉诺塔问题等。
  • 递归函数缺点:
    对栈的空间占用过大,容易对栈造成破坏。栈的大小为1M大小,数据过多容易溢出,对程序运行,产生较大破坏。如:斐波那契数列等。

函数举例

int Age(int n)//对年龄函数的一个计算
{
	int tmp;
	if(n == 1)
		tmp = 10;
	else
		tmp = Age(n-1) + 2;

	return tmp;
}

演示函数的使用过程:
图中数据的流向,表明该递归函数对空间即栈的使用。
在这里插入图片描述
汉诺塔问题的递归函数

void Move(char x,char y)
{
	printf("%c->%c\n",x,y);
	g_count++;
}

void Hanoi(int n,char a,char b,char c)//汉诺塔递归函数
{
	if(n == 1)
	{
		Move(a,c);
	}
	else
	{
		Hanoi(n-1,a,c,b);
		Move(a,c);
		Hanoi(n-1,b,a,c);
	}

不适合递归函数的问题:
斐波那契数列

int Fibona(int n)//递归的斐波那契数列
{
	if(n==1 || n==2)
		return 1;
	else
		return Fibona(n-1) + Fibona(n-2);
}
int Fibona_for(int n)//非递归函数的斐波那契数列
{
	int f1 = 1;
	int f2 = 1;
	int f3 = 1;
	for(int i=2;i<n;i++)
	{
		f3 = f1 + f2;
		f1 = f2;
		f2 = f3;
	}
	return  f3;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值