C语言干货——喝杯可乐的时间顺便搞懂函数递归

目录

什么是函数递归?

递归的两个必要条件

实例一:使用递归实现斐波那契数列

实例二: 递归实现n的阶乘


什么是函数递归?

        1.程序调用自身的编程技巧称为递归。

        2.递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。

        3.递归的主要思想在于:把大事化小。


递归的两个必要条件

        (1)存在限制条件,当满足这个限制条件的时候,递归便不再继续。

        (2)每次递归调用之后越来越接近这个限制条件。


下面我们通过两个比较经典的例子来实际讲解一下函数递归

实例一:使用递归实现斐波那契数列

思路:斐波那契数列我们知道从第三个数开始,每个数就是前两个数之和。

int Fib(int n) 
{
	if (n == 1 || n==2)
		return 1;
	else
		return Fib(n - 1) + Fib(n - 2);
}
int main() 
{
	int n = 0;//定义的是什么第几个数
	scanf("%d", &n);
	printf("%d", Fib(n));
	return 0;
}

        我们拿50举例可以看到不满足if的条件直接去到else,Fib函数就回去找49和48两个数,但是49和48又会去找下面两个数,我们就会发现已经把50分解成了很多个小问题,越往后你会发现越来越接近限制条件,我们称这个过程叫做递推。然后最后的结果回一层一层的返回去,返回到第一次调用这个函数的地方,我们称这个过程叫做回归,所以到这里我们发现递归函数可以分为两个部分递推和回归。


实例二: 递归实现n的阶乘

思路:

        我们发现1的阶乘是1*1,2的阶乘是1*2,那我们以此类推n的阶乘是不是就是n*(n-1)的阶乘呢?那我们思路已经有了接下来就是代码的实现

 

int Factorial(int n) 
{
	int ret = 0;
	if (n == 0)
		return 0;
	else if (n == 1)
	{
		return 1;
	}
	else
		ret = Factorial(n - 1) * n;
	return ret;
		
}
int main() 
{
	int n = 0;
	scanf("%d\n", &n);
	int ret = Factorial(n);
	printf("%d\n", ret);
	return 0;
}

 

        函数递归固然方便,但也别掉入递归的循环里,遇到任何题就是递归,用其他方法可能更好哟

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值