[C语言]一个最简单的例子让你明白什么是递归

1.什么是递归

递归是一种解决问题的方法,简单来说就是函数自己调用自己。可以理解为一种抽象的思维方式,我们需要一些宏观思维才能更好的理解递归。

递归中递就是递推,归就是回归。

需要注意每次递归都要在栈区分配空间,当递归层次太深会栈溢出

2.递归三要素

1.递归定义:函数的参数、返回值和函数发挥的作用

2.递归拆解:分析每次递归需要执行的操作,即要找到等价的函数表达式

3.递归出口:要有结束条件,并且每次递推都越来越接近这个条件,避免栈溢出

3.递归举例

题目:求n的阶乘(不考虑溢出)

分析

n的阶乘等于1~n的数累计相乘,即n!=1*2*3*...*n

可以写成n!=1*2*3*...*(n-1)*n

我们可以得出公式n!=n*(n-1)!

假设函数Fact(n)就是求n的阶乘,可以得出最终的递归公式如下:

Fact(n)\left\{\begin{matrix} 1,&n==0\\ n*Fact(n-1), & n>0 \end{matrix}\right.

根据公式可以写出代码:

#include <stdio.h>
//求n!
int Fact(int n)
{
	if (n == 1)
	{
		return 1;
	}
	else
	{
		return n * Fact(n - 1);//n!=n*(n-1)!
	}
}
int main()
{
	int n = 0;
	scanf("%d", &n);
	printf("%d\n", Fact(n));
	return 0;
}

运行代码,输入n的值就能得到n!

当输入5时函数Fact(5)的返回值为5*Fact(5-1),直到最后

Fact(5)==5*Fact(4)==5*4*Fact(3)==5*4*3*Fact(2)==5*4*3*2*Fact(1)==5*4*3*2*1

想要求出Fact(5)就要求出Fact(4),想要知道Fact(4)就要求出Fact(3),直到Fact(1)时返回值为1时递推结束,再进行回归,最后的结果就是5*4*3*2*1*1的值。

欢迎在评论区批评指正

封面图来自百度安全验证

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学无止境\n

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值