C语言基础——五分钟打开递归大门

本文介绍了递归的概念,将其比喻为套娃,并强调递归在程序设计中的广泛应用。文章通过一个简单的递归示例解释了递归的运行原理,提到了递归的必要条件和可能导致的堆栈溢出问题。此外,还提及了与递归相关的Stack Overflow网站,以及递归的语法格式和适用问题类型,如杨辉三角、链表等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

传统艺能😎

小编是大一菜鸟不赘述,欢迎大佬指点江山(QQ:1319365055)
此前博客点我!点我!请搜索博主 【知晓天空之蓝】点我!点我!请搜索博主 【知晓天空之蓝】或扫码进入!
乔乔的gitee代码库(打灰人欢迎访问,点我!
在这里插入图片描述

(https://blog.51cto.com)感谢支持!

过渡区🤣

现在是北京时间13:23,今天去图书馆说找紫书和一本《Qt Creator快速入门》,后面发现没有,有点失望又不想买(老白嫖怪了),就找了本
《算法设计与分析》;笑死,根本看不懂,里面的题目根本没解析,玩不起了。

在这里插入图片描述

正片开始👀

概念👏

什么是递归?网上用的例子是“从前有座山,山上有座庙……”,实际上程序调用自身的编程技巧就是递归,接地气一点就是套娃(包子馅的包子,它的极限是馒头)。
在这里插入图片描述

它作为一种算法在程序设计语言中应用的很广泛,一个函数或一个过程在定义或说明中间接调用自身的一种方法;通常把一个大型复杂问题层层转化,我的理解是去其糟粕,“炼”其精华,最后化成一个与原问题相似规模较小的问题来求解。他的突出就表现在只需少量程序就可以描述出解题过程所需的多次重复计算,大大的减少了程序的代码量。其重要思想,核心观念总结一下就是大事化小。

递归存在两个必要条件:1.限制条件,当满足这个限制条件时,递归中止。每次递归调用后越来越接近这个限制条件。(我反正一开始看的云里雾里)

于是我们这里端上一个简单的递归:
在这里插入图片描述
这个代码执行结果是死循环的,但后边儿停下了,现在vs2019还是蛮强的嘛。其实,这是递归中常见的一种错误——堆栈溢出。这里就是main函数自己调用自己,我们之前讲过内存的结构,我要在内存中的栈区为这次调用申请空间,然后咱把他死循环,栈区被榨干后,就会栈溢出。
在这里插入图片描述

题外话👏

既然扯到堆栈了,堆栈英文“stack overflow”,有一个全球性的同性交友♂网站也是由这个命名的,点击跳转它相当于程序猿的知乎,就是有人提问然后又有专业领域大神回答的平台,其火爆程度绝对不亚于Github。

下面是游客登录的主页:

在这里插入图片描述

语法格式👏

语法格式如下:

> void recursion()
{
   statements;
   ... ... ...
   recursion(); /* 函数调用自身 */
   ... ... ...
> void recursion()
{
>  }
 
int main()
{
   recursion();
}

具体使用情景👏

具有以下特征的问题可考虑递归求解:

当问题和子问题具有递推关系,比如杨辉三角、计算阶乘。或具有递归性质的数据结构,比如链表、树、图;还有反向性问题,比如取反。

说到根本上,最根本的还是要抓住问题本身是否可以通过层层分解来简化。

今天就到这里,摸了家人们。

评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

乔乔家的龙龙

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

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

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

打赏作者

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

抵扣说明:

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

余额充值