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

简介: 概念👏什么是递归?网上用的例子是“从前有座山,山上有座庙……”,实际上程序调用自身的编程技巧就是递归,接地气一点就是套娃(包子馅的包子,它的极限是馒头)。

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


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


于是我们这里端上一个简单的递归:

image.png

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

image.png

题外话👏

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

下面是游客登录的主页:

image.png

语法格式👏

语法格式如下:

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

具体使用情景👏

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

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

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

相关文章
|
3月前
|
机器学习/深度学习 C语言
九/十:《初学C语言》— 扫雷游戏实现和函数递归基础
【8月更文挑战第5天】本篇文章用C语言采用多文件编写实现了一个基础的扫雷游戏(附源码),并讲解了关于函数递归的基础概念及其相对应的习题练习(附源码)
42 1
九/十:《初学C语言》— 扫雷游戏实现和函数递归基础
|
28天前
|
机器学习/深度学习 C语言
【c语言】一篇文章搞懂函数递归
本文详细介绍了函数递归的概念、思想及其限制条件,并通过求阶乘、打印整数每一位和求斐波那契数等实例,展示了递归的应用。递归的核心在于将大问题分解为小问题,但需注意递归可能导致效率低下和栈溢出的问题。文章最后总结了递归的优缺点,提醒读者在实际编程中合理使用递归。
56 7
|
1月前
|
C语言
c语言回顾-函数递归(上)
c语言回顾-函数递归(上)
33 2
|
1月前
|
C语言
c语言回顾-函数递归(下)
c语言回顾-函数递归(下)
38 0
|
3月前
|
机器学习/深度学习 C语言
【C语言篇】递归详细介绍(基础概念习题及汉诺塔等进阶问题)
要保持最小的步数,每一次汉诺塔问题(无论是最初还是递归过程中的),如果此时初始柱盘子数为偶数,我们第一步是把最上面的盘子移动到中转柱,如果为奇数,我们第一步则是将其移动到目标柱。
81 0
【C语言篇】递归详细介绍(基础概念习题及汉诺塔等进阶问题)
|
3月前
|
C语言
C语言中的递归
C语言中的递归
|
4月前
|
存储 编译器 C语言
|
3月前
|
算法 编译器 C语言
【C语言】递归
【C语言】递归
20 0
|
5月前
|
机器学习/深度学习 算法 C语言
详细介绍递归算法在 C 语言中的应用,包括递归的基本概念、特点、实现方法以及实际应用案例
【6月更文挑战第15天】递归算法在C语言中是强大力量的体现,通过函数调用自身解决复杂问题。递归涉及基本概念如自调用、终止条件及栈空间管理。在C中实现递归需定义递归函数,分解问题并设定停止条件。阶乘和斐波那契数列是经典应用示例,展示了递归的优雅与效率。然而,递归可能导致栈溢出,需注意优化。学习递归深化了对“分而治之”策略的理解。**
110 7
|
5月前
|
C语言
C语言--函数递归与迭代
C语言--函数递归与迭代