C语言(长期更新)第8讲 函数递归

C语言(长期更新)

第8讲:函数递归

    跟着潼心走,轻松拿捏C语言,困惑通通走,一去不回头~欢迎开始今天的学习内容,你的支持就是博主最大的动力


目录

C语言(长期更新)

第8讲

函数递归

知识回顾

 前言

8.1 什么是递归

8.1.1 where——啥时候用

8.1.2 how——怎么用

8.1.3 what——具体含义

8.2 递归实例1:计算阶乘

8.2.1分析与代码实现

8.2.2 画图分析

8.3 递归实例2:顺序打印一个整数的每一位

8.3.1分析与代码实现

8.3.2 画图分析


知识回顾

上节课我们学习了一些VS实用的调试技巧,今天我们来学习函数递归的内容,坐稳了,我们发车,gogogo!


 前言

我们在先前解决问题时常常会用到循环来解决一些重复的操作,往往写代码时需要写很多行代码。今天我们来介绍一种全新解决问题的方法——函数递归(Recursion)

8.1 什么是递归

递归就是函数自己调用自己

举个🌰

比如上面的代码,在main函数中调用main函数,导致main函数无限调用,无限次打印"hehe"

运行一段时间后,弹出报错警告,我们看到报错信息中有一个stack overflow,就是栈溢出的意思。为什么会这样捏?因为每次main函数的运行都需要在内存中开辟空间,空间不够用了就造成栈溢出了。

上面是函数递归的错误使用,只是为了方便说明,下面我们就来详细介绍一下函数递归

8.1.1 where——啥时候用

函数递归常用于将一个大规模的问题转化为规模较小的同类子问题,直至问题不可继续拆解

这种大化小的思想赋予了函数递归常常以几行简单代码就能解决复杂问题的特性

8.1.2 how——怎么用

  • 函数递归是有限制条件的,达到限制条件终止递归
  • 每次递归都会逼近这个限制条件,以避免栈溢出

8.1.3 what——具体含义

递归二字递为递推,归为回归

8.2 递归实例1:计算阶乘

8.2.1分析与代码实现

我们知道一个数字的阶乘(Factorial)就是从1乘到这个数的积。可我们也可以换一种思路

你想,1!=1,2!=1*2=1!*2,...依此类推可得 n!=(n-1)!*n

唉,这不就递归了吗,算一个数的阶乘被转化为算比他小1的数的阶乘,比他小1的结成有转化为哦算比他小2的数的阶乘。以大化小,妙哉!

下面我们写代码

8.2.2 画图分析

先逐层函数递归,将大的问题拆解,层层深挖,推至无处可推,在逐层回归问题,一步一步将值代入,这就是递归。

8.3 递归实例2:顺序打印一个整数的每一位

8.3.1分析与代码实现

给一个数我们最容易得到的就是这个数的个位

想要拿到最高位的数字最容易想到的办法就是一层一层剥下来。每次除以10剥取最后一位,再取余

每一次都是对取过余的数做除以10的操作这就是重复性的同类子问题,因此我们可以使用递归

下面我们写代码

8.3.2 画图分析


    好了今天的学习内容就到这里啦,谢谢你的陪伴,我是潼心,下次再见~如果这篇文章对你有帮助的话。请务必给主播一个一键三连,球球了,这对主播很重要~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/91904.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/91904.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[硬件电路-129]:模拟电路 - 继电器的工作原理、关键指标、常用芯片与管脚定义

一、工作原理继电器是一种基于电磁感应原理的自动开关装置,通过控制小电流电路实现大电流电路的通断。其核心结构包括:电磁铁(线圈铁芯):通电时产生磁场,吸引衔铁动作。触点系统:包含常开触点&a…

Haproxy调度算法 - 静态算法介绍与使用

文章目录一、概述二、socat工具三、static-rr四、firstHAProxy通过固定参数 balance 指明对后端服务器的调度算法,该参数可以配置在listen或backend选项中。HAProxy的调度算法分为静态和动态调度算法,但是有些算法可以根据参数在静态和动态算法中相互转换…

模拟激光相机工作站版本6.0 5.2.32 6.0.44 6.031 5.2.20

模拟激光相机工作站版本6.0 5.2.32 6.0.44 6.031 5.2.20

AWS Blockchain Templates:快速部署企业级区块链网络的终极解决方案

无需精通底层架构,一键搭建Hyperledger Fabric或以太坊网络!AWS Blockchain Templates 可帮助您快速基于不同的区块链框架在 AWS 上创建和部署区块链网络。区块链是一种分布式数据库技术,用于维护不断增长的交易记录和智能合约集合&#xff0…

Vue 服务端渲染 Nuxt 使用详解

Nuxt 是基于 Vue 的高层框架,专注于服务器端渲染应用开发。它封装了繁琐的配置和通用模式,提供了开箱即用的 SSR 功能,使开发者能够专注于编写业务逻辑。 1. Nuxt 的核心特性 SSR 支持:默认支持服务端渲染,提高应用性…

使用ACK Serverless容器化部署大语言模型FastChat

核心概念 阿里云ACK Serverless:是一种基于 Kubernetes 的无服务器容器服务。用户无需管理底层节点和服务器,即可快速部署容器化应用,并根据实际使用的 CPU 和内存资源按需付费,只专注于应用本身而非基础设施管理。 FastChat&…

最新Android Studio汉化教程--兼容插件包

[ ] 软件版本:Android Studio Meerkat Feature Drop | 2024.3.2 Build #AI-243.25659.59.2432.13423653, built on April 30, 2025 Runtime version: 21.0.613368085-b895.109 amd64 VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o. Toolkit: sun.awt.windows.WT…

Unity_数据持久化_IXmlSerializable接口

Unity数据持久化 三、XML数据持久化 3.5 IXmlSerializable接口 3.5.1 IXmlSerializable接口基础概念 什么是IXmlSerializable接口: IXmlSerializable 是.NET框架提供的一个接口,允许类自定义XML序列化和反序列化的过程。当默认的XML序列化行为无法满足需…

如何快速解决PDF解密新方法?

有时从网络下载的PDF文档会带有加密限制,导致无法编辑、复制或打印。它的体积仅约10MB,无需安装,解压即用。遇到受限制的文件时,只需将其拖入界面,选择是否覆盖原文件,点击执行,瞬间完成解密。「…

译|数据驱动智慧供应链的构成要素与关联思考

数据质量,通过识别关键决策和瓶颈构建信息供应链。该模型适用于优化库存管理、自动化物流、预测需求、实现产品全生命周期追溯及应对突发风险。例如,通过AI机器人自动管理仓库,或利用数字孪生模拟和优化全球采购网络。 汇总来自三篇文章&…

OS21.【Linux】环境变量

目录 1.与环境变量有关的实验 A.对比命令和自制程序的运行 为什么.像ls、pwd这样的命令运行是不需要加路径? 执行自制程序而不加路径的方法,看看PATH环境变量 方法1:将自制程序移动到系统的搜索路径下 方法2:临时修改PATH环境变量 B.查看系统中所有环境变量 解释几个常…

加密流量论文复现:《Detecting DNS over HTTPS based data exfiltration》(上)

本文将以我个人的理解去阅读该篇流量加密论文,并在下一篇尽力对其中的实验部分进行复现。话不多说,先从论文开始着手。 内容介绍 传统的DNS(Domain Name System)协议是以明文传输的。DNS作为互联网的基础设施,最初设计时主要考虑的是功能和效…

Apache RocketMQ 中Message (消息)的核心概念

好的,我们来深入理解一下 Apache RocketMQ 中 Message (消息) 这个核心概念。这份文档详细阐述了消息的定义、在模型中的位置、内部属性、约束和使用建议。 你可以将 Message 看作是 RocketMQ 系统中数据传输和处理的最小原子单位。它承载了业务数据,并附…

C 语言问题

1. C语言中 union 与 struct 的区别类型structunion内存分配机制编译器为每个成员‌独立分配内存空间,总内存大小 所有成员大小之和(考虑内存对齐)所有成员‌共享同一段内存空间,总内存大小 ‌最大成员的大小‌数据存储特性1. 所…

[ LeetCode优选算法专题一双指针-----盛最多的水]

1.题目链接 LeetCode盛最多的水 2.题目描述 3.题目解析 问题本质分析 "盛最多水的容器" 问题可以抽象为:在坐标轴上有 n 条垂直线段,第 i 条线段的两个端点分别是 (i, 0) 和 (i, height [i])。找到两条线段,使得它们与 x 轴共同…

旧笔记本电脑如何安装飞牛OS

01引言随着电子产品的更新换代,我们有很多的电子产品已经满足不了现在的工作需求和日常娱乐了,比如:用了很久厚重笔记本电脑放在现在办公也是有点吃力了,我们现在换新了旧的还不想放在那里吃灰,怎么办呢?我…

某金服Java面试终极指南:25题完整解析与场景化方案

涵盖分布式锁、缓存、事务、高并发等金融系统核心考点,附解决方案与抗风险设计一、分布式锁深度解决方案 1. Redis分布式锁完整实现 // 原子加锁 防死锁 String uuid UUID.randomUUID().toString(); Boolean locked redisTemplate.opsForValue().setIfAbsent(&qu…

MATLAB 2025a的下载以及安装,安装X310的测试附加功能(附加安装包)

首先将安装包下载到本地中之后解压该文件夹,打开文件发现有两个文件,其中crach文件夹中是破解matlab所用到的文件。而另一个压缩包就是需要安装的文件,要先解压在安装。在安装之前将网络断开,不然可能破解不成功,先进入…

Scala实用编程(附电子书资料)

概述 Scala 是一种多范式编程语言,结合了面向对象编程(OOP)和函数式编程(FP)的特性电子书资料:https://pan.quark.cn/s/88737d4a680d Scala 的核心特点多范式融合 既支持面向对象编程(类、继承、…

数据结构(8)双向链表

目录 一、概念与结构 二、双向链表的实现 1、初始化 2、尾插 3、头插 4、尾删 5、头删 6、在指定位置之后插入结点 7、删除指定位置的结点 三、完整参考代码 一、概念与结构 这里的双向链表是指带头的的双向循环链表,这里的“带头”和之前所说的“头结…