C语言初识函数递归(上)

1.什么是递归?

简单来说就是讲一个复杂的问题拆分成一个与原问题相似但规模较小的子问题,重复这个过程,直到子问题不能拆分为止,递归就结束了。总的来说就是一个大事化小,小事化了的思想。
递归的递就是递推的,归是归一。

2.递归的原理

递归是依靠函数自身调用自身不断拆分问题直到问题解决后,逐步返回的过程。打个比方,递归类似于俄罗斯套娃,而递归就像把娃娃逐个打开然后在逐个关上的过程。

举个示例

题目:求n!

我们可以先举一个较小的数如5!
5!=5 * 4!=5 * 4 *3!=… =5 * 4 * 3 * 2 * 1
那么同理n! =n * (n-1)!= —> =n *(n-1)… 2 * 1
再结合0!= 1
绘图可得:
在这里插入图片描述
写成函数形式为:
在这里插入图片描述
个人觉得递归的运行还是会让初学者感到有点难度的(别问为什么,问就是我刚学的时候听不懂),所以本人以3举例图解:
在这里插入图片描述

敲黑板

3.递归的限制条件

递归在书写的时候,有两个必要条件(不满足必错!!!):

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

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

在这里插入图片描述

理解:对于条件一,我们可以通过上一张图片了解,假设把return 0这一条件删去时函数就会无止境的循环下去,最终会导致一个错误Stack overflow(栈溢出)。(简单来说每一次函数的运行都需要开辟一个空间来存储,而这个空间就是函数栈帧,好比是内存,一旦满了就无法继续下去,这就是栈溢出。)
而对于条件2较好理解就不再解释了。

4.优点和语境(个人理解)

(1)优点:函数递归可以通过少量代码完成大量的相似且重复的计算,可以提升程序员写代码的效率。
(2)语境:使用时首先要分析问题,例如之前举例的求n!的问题,如果n过大,那么也会导致运算效率低下,甚至出错。函数递归就像是画树状图,每一次函数调用都会产生沿着不同的路径直到走到终点,然后再回归原本。所以函数递归用时首先要确保调用次数不能太多,其次要懂得对问题进行深刻剖析再下定论。

5.个人感悟

通过这章的学习我学会了分析问题,明白了为什么学编程要数学好的原因,准确来说是要求我们分析问题和转化问题的能力。

制作不易,希望大家支持一下。

  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

论程序猿是怎样炼成的

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

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

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

打赏作者

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

抵扣说明:

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

余额充值