当前位置: 首页 > 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太大存在溢出):

 

http://www.lryc.cn/news/144353.html

相关文章:

  • arcgis+postgresql+postgis使用介绍
  • 机器视觉之开运算和闭运算
  • 【python爬虫】—URL管理器的实现
  • Oracle 19C RAC安装PSU oui-patch.xml权限错误
  • 华为数通方向HCIP-DataCom H12-821题库(单选题:161-180)
  • ResNet详解:网络结构解读与PyTorch实现教程
  • ChatGPT 随机动态可视化图表分析
  • 国标视频融合云平台EasyCVR视频汇聚平台的应用场景及其功能说明
  • 后端面试话术集锦第三篇:spring cloud 面试话术
  • React 18 选择 State 结构
  • LNMT与动静分离
  • 【java】LinkedList 和 ArrayList的简介与对比
  • 机器学习基础14-算法调参(基于印第安糖尿病Pima数据集)
  • ASUS华硕天选4笔记本电脑FA507XV原厂Windows11系统22H2
  • IET独立出版 | EI检索 | 2023年第三届机械、航空航天与汽车工程国际会议
  • 【Pytorch】CUDA error: no kernel image is available for execution on the device
  • dolphinschedule配置企微告警服务(WeChat群组)
  • Git中smart Checkout与force checkout
  • Java“牵手”1688商品跨境属性数据,1688API接口申请指南
  • Win解答 | 解决键盘中 字母+空格 导致的输入法弹窗导致的一系列问题
  • WPF读取dicom序列:实现上一帧、下一帧、自动播放、暂停
  • homeassistant ubuntu自启动 网络设置
  • 生成式AI背景下编程工作者的技术和高级软考理论的演进融合之路
  • RabbitMQ的镜像队列
  • 【Spring Boot】数据库持久层框架MyBatis — Spring Boot构建MyBatis应用程序
  • 【校招VIP】专业课考点之session cookie
  • IDEA集成Git相关操作知识(pull、push、clone)
  • Springboot 整合 Redis配置
  • Spark 启动时,报JAVA_HOME is not set
  • 运用Python解析HTML页面获取资料