当前位置: 首页 > news >正文

C语言(第三十二天)

1. 递归是什么?
递归是学习C语言函数绕不开的一个话题,那什么是递归呢?
递归其实是一种解决问题的方法,在C语言中,递归就是函数自己调用自己。
写一个史上最简单的C语言递归代码:

#include <stdio.h>
int main()
{printf("hehe\n");main();//main函数中又调用了main函数return 0;
}

上述就是一个简单的递归程序,只不过上面的递归只是为了演示递归的基本形式,不是为了解决问
题,代码最终也会陷入死递归,导致栈溢出。

 递归的思想:
把一个大型复杂问题层层转化为一个与原问题相似,但规模较小的子问题来求解;直到子问题不能再被拆分,递归就结束了。所以递归的思考方式就是把大事化小的过程。
递归中的递就是递推的意思,归就是回归的意思,接下来慢慢来体会.

2. 递归的限制条件
递归在书写的时候,有2个必要条件:
• 递归存在限制条件,当满足这个限制条件的时候,递归便不再继续。
• 每次递归调用之后越来越接近这个限制条件。
在下面的例子中,我们逐步体会这2个限制条件。

3. 递归举例
3.1 举例1:求n的阶乘
计算n的阶乘(不考虑溢出),n的阶乘就是1~n的数字累积相乘。
3.1.1 分析和代码实现
我们知道n的阶乘的公式: n! = n ∗ (n − 1)!

举例:5! = 5*4*3*2*14! = 4*3*2*1所以:5! = 5*4!

这样的思路就是把一个较大的问题,转换为一个与原问题相似,但规模较小的问题来求解的。
n!---> n*(n-1)!

        (n-1)! ---> (n-1)*(n-2)!
....
直到n是1或者0时,不再拆解

再稍微分析一下,当n<=1 的时候,n的阶乘是1,其余n的阶乘都是可以通过上述公式计算。
n的阶乘的递归公式如下:

 那我们就可以写出函数Fact求n的阶乘,假设Fact(n)就是求n的阶乘,那么Fact(n-1)就是求n-1的阶
乘,函数如下:

int Fact(int n)
{if(n<=0)return 1;elsereturn n*Fact(n-1);
}

测试:

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

运行结果(这里不考虑n太大的情况,n太大存在溢出):

 

相关文章:

C语言(第三十二天)

1. 递归是什么&#xff1f; 递归是学习C语言函数绕不开的一个话题&#xff0c;那什么是递归呢&#xff1f; 递归其实是一种解决问题的方法&#xff0c;在C语言中&#xff0c;递归就是函数自己调用自己。 写一个史上最简单的C语言递归代码&#xff1a; #include <stdio.h>…...

arcgis+postgresql+postgis使用介绍

关于arcgis在postgresql创建地理数据库我分享一下自己的经历&#xff1a; 众所周知&#xff0c;arcgis如果在oracle中创建地理数据库&#xff0c;必须要使用ArcToolbox里面的地理数据库工具去创建&#xff0c;在里面发现它还可以创建sql_server, postgresql数据库类型&#xf…...

机器视觉之开运算和闭运算

开运算&#xff08;Opening&#xff09;和闭运算&#xff08;Closing&#xff09;是数学形态学中常用的图像处理操作&#xff0c;通常用于去除图像中的噪声、连接物体、分离物体等操作。它们分别由两个基本操作组成&#xff1a;腐蚀&#xff08;Erosion&#xff09;和膨胀&…...

【python爬虫】—URL管理器的实现

python爬虫-url管理器 url管理器的作用python实现 url管理器的作用 在Python爬虫中&#xff0c;URL管理器&#xff08;URL Manager&#xff09;是一个重要的组件&#xff0c;用于有效管理爬取过程中所涉及的URL。它主要负责以下几个方面的任务&#xff1a; URL去重&#xff08;…...

Oracle 19C RAC安装PSU oui-patch.xml权限错误

Oracle 19C RAC安装PSU时&#xff0c;节点2安装失败&#xff0c;经排查错误原因为oui-patch.xml文件权限错误。 Oracle官方建议oui-patch.xml文件权限&#xff0c;改成660或者666&#xff1a; chmod 660 oui-patch.xml权限修改完成后&#xff0c;安装psu还是失败&#xff0c;…...

华为数通方向HCIP-DataCom H12-821题库(单选题:161-180)

第161题 以下关于 URPF(Unicast Reverse Path Forwarding) 的描述&#xff0c; 正确的是哪一项 A、部署了严格模式的 URPF&#xff0c;也能够可以同时部署允许匹配缺省路由模式 B、如果部署松散模式的 URPF&#xff0c;默认情况下不需要匹配明细路由 C、如果部署松散模式的…...

ResNet详解:网络结构解读与PyTorch实现教程

目录 一、深度残差网络&#xff08;Deep Residual Networks&#xff09;简介深度学习与网络深度的挑战残差学习的提出为什么ResNet有效&#xff1f; 二、深度学习与梯度消失问题梯度消失问题定义为什么会出现梯度消失&#xff1f;激活函数初始化方法网络深度 如何解决梯度消失问…...

ChatGPT 随机动态可视化图表分析

动态可视化图表分析实例如下图: 这样的动态可视化图表可以使用ChatGPT OpenAI 来实现。 给ChatGPT发送指令: 你现在是一个数据分析师,请使用HTML,JS,Echarts,来完成一个动态条形图,条形图方向横向,数据可以随机生成,并且随机生成10个不同的商品名称,每个类别分别用…...

国标视频融合云平台EasyCVR视频汇聚平台的应用场景及其功能说明

一、平台简介 EasyCVR国标视频融合云平台是一款基于端-边-云一体化架构的视频融合AI智能分析网关平台。EasyCVR平台支持视频汇聚、融合管理&#xff0c;兼容多类型设备、多协议接入。其提供的视频功能包括&#xff1a;视频监控、无插件直播录像、云存储、检索回放、智能告警、…...

后端面试话术集锦第三篇:spring cloud 面试话术

🚗后端面试集锦目录 💖后端面试话术集锦第 1 篇:spring面试话术💖 💖后端面试话术集锦第 2 篇:spring boot面试话术💖 💖后端面试话术集锦第 3 篇:spring cloud面试话术💖 💖后端面试话术集锦第 4 篇:ElasticSearch面试话术💖 💖后端面试话术集锦第 5 …...

React 18 选择 State 结构

参考文章 选择 State 结构 构建良好的 state 可以让组件变得易于修改和调试&#xff0c;而不会经常出错。以下是在构建 state 时应该考虑的一些建议。 构建 state 的原则 当编写一个存有 state 的组件时&#xff0c;需要选择使用多少个 state 变量以及它们都是怎样的数据格…...

LNMT与动静分离

目录 一、LNMT 一、部署tomcat 二、部署nginx 三、部署mariadb 四、配置nginx 二、操作流程及步骤 一、在第一台机器上进入 vim /etc/nginx/nginx.conf 更改配置文件 二、并查看端口是否成功启动 三、验证 四、再次来到网页验证 五、动静分离&#xff08;修改配置…...

【java】LinkedList 和 ArrayList的简介与对比

Java LinkedList和 ArrayList 在使用上&#xff0c;几乎是一样的。由于LinkedList是基于双向链表的&#xff0c;会多出list.getFirst();获取头部元素等方法 链表&#xff08;Linked list&#xff09;是一种常见的基础数据结构&#xff0c;是一种线性表&#xff0c;但是并不会按…...

机器学习基础14-算法调参(基于印第安糖尿病Pima数据集)

机器学习的模型都是参数化的&#xff0c;可以通过调参来提高模型的准确度。 模型有很多参数&#xff0c;如何找到最佳的参数组合&#xff0c;可以把它当作一个查询问题来处理&#xff0c;但是调整参数到何时为止呢&#xff1f;应该遵循偏差和方差协调的原则。 接下来将介绍在 s…...

ASUS华硕天选4笔记本电脑FA507XV原厂Windows11系统22H2

天选四FA507X原装系统自带所有驱动、出厂主题壁纸LOGO、Office办公软件 华硕电脑管家、奥创控制中心等预装程序&#xff0c;恢复出厂状态W11 链接&#xff1a;https://pan.baidu.com/s/1SPoFW7wR5KawGu-yMckNzg?pwdayxd 提取码&#xff1a;ayxd...

IET独立出版 | EI检索 | 2023年第三届机械、航空航天与汽车工程国际会议

会议简介 Brief Introduction 2023年第三届机械、航空航天与汽车工程国际会议&#xff08;CMAAE 2023&#xff09; 会议时间&#xff1a;2023年12月8 -10日 召开地点&#xff1a;中国南京 大会官网&#xff1a;www.cmaae.org 航天是当今世界最具挑战性和广泛带动性的高技术领域…...

【Pytorch】CUDA error: no kernel image is available for execution on the device

记录一下pytorch安装的cuda版本和GPU cuda不一致的解决。 RuntimeError: CUDA error: no kernel image is available for execution on the device 一般就是pytorch和cuda安装的不匹配。 如果我安装的torch配的cuda信息如下&#xff0c; torch.__version__: 1.8.1cu102 tor…...

dolphinschedule配置企微告警服务(WeChat群组)

一、前置说明 ds配置好工作流后&#xff0c;比较重要的一个就是上线后的监控报警服务&#xff0c;如果你是基于企微作为协同办公的&#xff0c;WeChat群组预警必须是要安排上的&#xff0c;文章基于自建应用配合群组方式构建预警群&#xff0c;接入后&#xff0c;任务成功或者…...

Git中smart Checkout与force checkout

Git中smart Checkout与force checkout 使用git进行代码版本管理,当我们切换分支有时会遇到这样的问题&#xff1a; 这是因为在当前分支修改了代码&#xff0c;但是没有commit,所以在切换到其他分支的时候会弹出这个窗口&#xff0c; 提示你选force checkout或者smart checko…...

Java“牵手”1688商品跨境属性数据,1688API接口申请指南

1688平台商品详情跨境属性数据接口是开放平台提供的一种API接口&#xff0c;通过调用API接口&#xff0c;开发者可以获取1688商品的标题、价格、库存、月销量、总销量、库存、详情描述、图片&#xff0c;重量&#xff0c;详情描述等详细信息 。 获取商品详情接口API是一种用于…...

图像质量评估新视角:抛开PSNR和SSIM,聊聊如何用‘变异系数’量化局部细节清晰度

图像质量评估新视角&#xff1a;用变异系数量化局部细节清晰度的实战指南 在数字图像处理领域&#xff0c;评估图像质量一直是核心挑战。传统指标如PSNR&#xff08;峰值信噪比&#xff09;和SSIM&#xff08;结构相似性&#xff09;虽然广泛应用&#xff0c;但面对复杂场景时往…...

Go语言实现M3U8视频下载器:技术原理与实战应用深度解析

Go语言实现M3U8视频下载器&#xff1a;技术原理与实战应用深度解析 【免费下载链接】m3u8-downloader 一个M3U8 视频下载(M3U8 downloader)工具。跨平台: 提供windows、linux、mac三大平台可执行文件,方便直接使用。 项目地址: https://gitcode.com/gh_mirrors/m3u8d/m3u8-d…...

Cursor Free VIP:终极免费解锁AI编程助手Pro功能的完整指南

Cursor Free VIP&#xff1a;终极免费解锁AI编程助手Pro功能的完整指南 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached you…...

ElevenLabs奥里亚文语音合规性警告:印度《2023语言技术法案》生效后,这4类商用场景必须重做语音备案

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;ElevenLabs奥里亚文语音合规性警告的背景与紧迫性 ElevenLabs 作为领先的文本转语音&#xff08;TTS&#xff09;服务提供商&#xff0c;近期在其 API 文档与开发者控制台中新增了针对奥里亚文&#xf…...

Flutter项目构建提速:告别‘gradle assembleDebug’卡顿的实战配置指南

1. 为什么Flutter项目构建会卡在gradle assembleDebug&#xff1f; 每次看到Android Studio卡在"Running Gradle task assembleDebug..."这个界面&#xff0c;我都忍不住想砸键盘。作为一个踩过无数坑的老Flutter开发者&#xff0c;我完全理解这种痛苦。其实这个问题…...

多智能体 执行-辩论-校验 闭环架构

文章目录一、核心本质二、三大智能体权责划分1. 执行Agent&#xff08;A/B/C&#xff09;2. 辩论Agent3. 校验Agent&#xff08;终审裁判&#xff09;三、闭环流转逻辑四、关键设计规则五、TaskList 任务标准字段一、核心本质 整体架构本质&#xff1a;执行 → 辩论 → 校验 三…...

SLAM_TOOLBOX实战:从零到一构建长期可用的2D地图

1. SLAM_TOOLBOX入门&#xff1a;为什么选择它来构建2D地图&#xff1f; 第一次接触SLAM技术时&#xff0c;我被各种开源工具搞得眼花缭乱。直到在真实机器人项目里用了SLAM_TOOLBOX&#xff0c;才发现它简直是长期建图的"瑞士军刀"。这个基于ROS的工具包最打动我的地…...

怎么判断铝合金熔炼炉价格才合理?

在选购铝合金熔炼炉时&#xff0c;价格只是一个参考。需要关注市场行情、熔炼炉厂家信誉、设备性能与售后服务等多方面因素。铝熔炼炉若性能更好&#xff0c;初期投入虽高&#xff0c;长期使用能提升产能并降低单位成本。不同类型的冶金熔炼炉各有特点&#xff0c;会影响选型与…...

矩阵中的“对角线强迫症”:如何优雅地判断Toeplitz矩阵?

举个栗子 &#x1f330; 例子1&#xff1a; 矩阵&#xff1a; [6, 7, 8] [4, 6, 7] [1, 4, 6]它的对角线分别是&#xff1a;[6,6,6], [7,7], [8], [4,4], [1]&#xff0c;每条对角线上的数字都相同&#xff0c;所以它是Toeplitz矩阵 ✅ 例子2&#xff1a; 矩阵&#xff1a; …...

怎样更换照片背景?2026电脑手机软件方案全对比

想要快速更换照片背景却不知道用什么工具&#xff1f;市面上的照片处理软件五花八门&#xff0c;到底哪个才能满足你的需求&#xff1f;本文将为你详细对比电脑和手机上最实用的背景更换方案&#xff0c;帮你找到最适合的解决方式。照片更换背景的核心方法概览更换照片背景主要…...