递归

什么是递归,说白了就是程序自己调用自己。那么在什么情况下要使用递归呢
1、问题过于复杂无法拆解成循环语句。
2、问题非线性,而函数递归,由于借助栈内存(函数的每一次调用,就会把它的数据重新压入到栈空间,它的数据都会保留下来),可以解决非线的问题(如汉诺塔问题)。
这里要注意:在单线程模式下只能同时执行一个函数,当函数自己调用自己时(子级),会先执行子级的代码,然后子级执行完成后再返回到上一级继续执行。

用递归也是非常的危险的,因为使用递归很有可能造成"死循环",而且非常的消耗资源,所以我们使用递归要注意这几点:
1、先写出口,考虑如何在无限的调用下停止下来。
2、每次解决一个小问题。
3、把剩下的问题交给下一级(参数要发生变化)。

举个例子,用递归实现显示第n项的斐波纳契数列。

#include <stdio.h>

int func(int n)
{
	if(1 == n || 2 == n) return 1;
	return func(n-1)+func(n-2);
}

int main()
{
	printf("%d\n",func(6));
	return 0;
}

在func函数中if条件是这个递归结束的出口,每次使用return都会改变n的值,从而使递归顺利进行。

总的来说:
递归的优点:代码简单,容易理解。
递归的缺点:容易形成死循环,耗费内存,执行效率低(参数入栈、出栈,局部变量的定义、销毁)。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值