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

递归的个人总结

递归函数(递去、回归)是函数不断的调用自己;

可以按照如下来理解:func1中调用func2,func2中调用func3;

func3函数返回了,继续执行func2中的语句;func2执行完了,继续执行func1之后的语句;fun1执行结束。 

void func3()
{printf("this is  func3\n");return;
}
void func2()
{func3();printf("this is  func2\n");return;
}
void func1()
{func2();printf("this is  func1\n");return;
}
int  main()
{func1();return 0;
}

从上图中可以看出,最后调用的函数先执行完(也是递归中回归的过程),即:this is func3先打印输出。

递归算法(英语:recursion algorithm)是指一种通过重复将问题分解为同类的子问题而解决问题的方法。
递归的三要素:

1.明确函数的功能
2.递归的结束条件
3.函数的等价关系

接下来利用n nn阶乘来讲解这三个条件
任何大于等于1 的自然数n nn阶乘表示方法:
n ! = n × ( n − 1 ) ! ( n > 1 ) 0 ! = 1 ( n = 0 ) n!=n \times(n-1)! \quad (n > 1) \\ 0! = 1 \quad (n = 0)
n!=n×(n−1)!(n>1)
0!=1(n=0)

1.1明确函数的功能
明确我们要写的函数的功能是实现n nn的阶乘,定义函数如下:

// 定义n阶乘函数
 public int factorial(int n){
 
 }

1.2递归的结束条件
由阶乘的表示方法可以看出当n = 0 n = 0n=0时是阶乘的最小值,此时结束继续往下计算阶乘,可以把n = 0 n = 0n=0当做递归的结束条件。同样,当n = 1 n = 1n=1时,1 ! = 1 1! = 11!=1也可以作为递归的结束条件。

// 定义n阶乘函数
 public Integer factorial(int n){
     // 递归的结束条件
     if (n == 1) return 1;

 }
1.3函数的等价关系
第三要素就是,我们要不断缩小参数的范围,缩小之后,我们可以通过一些辅助的变量或者操作,使原函数的结果不变。
由阶乘的表达式可以看出n nn的阶乘与n − 1 n -1n−1阶乘存在的关系式为n ! = n × ( n − 1 ) ! ( n > 1 ) n!=n \times(n-1)! \quad (n > 1)n!=n×(n−1)!(n>1)若已知n − 1 n -1n−1的阶乘,记为f ( n − 1 ) f(n - 1)f(n−1),则当前的n nn的阶乘可以记为f ( n ) = n × f ( n − 1 ) ( n > 1 ) f(n) = n \times f(n -1)\quad (n > 1)f(n)=n×f(n−1)(n>1)
综上递归的三个要素可以得出求n nn阶乘的递归函数为

// 定义n阶乘函数
 public Integer factorial(int n){
     // 递归的结束条件
     if (n == 1) return 1;
    return n * factorial(n - 1);
 }
————————————————
                        
原文链接:https://blog.csdn.net/qq_38670588/article/details/108206613

相关文章:

递归的个人总结

递归函数(递去、回归)是函数不断的调用自己; 可以按照如下来理解:func1中调用func2,func2中调用func3; func3函数返回了,继续执行func2中的语句;func2执行完了,继续执行func1之后的…...

使用PDFBox调整PDF每页格式

目录 一、内容没有图片 二、内容有图片 maven依赖&#xff0c;这里使用的是pdfbox的2.0.30版本 <dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.30</version></dependency>…...

【3D reconstruction 学习笔记】

三维重建 3D reconstruction 1. 相机几何针孔相机摄像机几何 2. 相机标定线性方程组的解齐次线性方程组的解非线性方程组的最小二乘解透镜相机标定带畸变的相机标定 3. 单视图重建2D平面上的变换3D空间上的变换单视测量无穷远点 无穷远线 无穷远平面影消点 影消线单视重构 4. 三…...

(附源码)基于Spring Boot与Vue的宠物用品销售系统设计与实现

前言 &#x1f497;博主介绍&#xff1a;✌专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅&#x1f447;&#x1f3fb; 2024年Java精品实战案例《100套》 &#x1f345;文末获取源码联系&#x1f345; &#x1f31…...

Qwen及Qwen-audio大模型微调项目汇总

Qwen及Qwen-audio可微调项目调研 可用来微调方法/项目汇总ps.大语言模型基础资料 可用来微调方法/项目汇总 Qwen github 项目自带的finetune脚本 可以参考https://blog.csdn.net/qq_45156060/article/details/135153920PAI-DSW中微调千问大模型&#xff08;阿里云的一个产品&a…...

浅析ArcGis中的软件——ArcMap、ArcScene、 ArcGlobe、ArcCatalog

为什么要写这么一篇介绍ArcGis的文章呢&#xff1f;因为大部分人也包括ArcGisdada&#xff0c;在使用ArcMap应用程序创建工程时总以为我们就是使用了ArcGis这个软件的所有。其实不然&#xff0c;在后期的接触和使用中慢慢发现原来ArcMap只是ArcGis这个综合平台的一部分&#xf…...

AndroidStudio插件出现“Compatible with IntelliJ IDEA only“错误时的解决方案

原因:插件比较老&#xff0c;配置可能存在问题 1.修改plugins文件夹下的jar包(插件) 找到AndroidStudio所在位置 打开plugins文件夹,找到需要修改的jar包,通过压缩软件用zip方式打开&#xff0c;找到\META-INF\plugin.xml并编辑&#xff0c;在<version>xxxx</versi…...

探索未来的编程趋势与挑战

摘要&#xff1a; 本文将探讨未来编程领域可能面临的挑战和发展趋势&#xff0c;包括人工智能、量子计算、区块链等新兴技术对编程的影响&#xff0c;以及程序员需要具备的新技能和素质。 随着人工智能技术的快速发展&#xff0c;机器学习、深度学习等算法在编程领域的应用越来…...

第十二届蓝桥杯省赛CC++ 研究生组

十二届省赛题 第十二届蓝桥杯省赛C&C 研究生组-卡片 第十二届蓝桥杯省赛C&C 研究生组-直线 第十二届蓝桥杯省赛C&C 研究生组-货物摆放 第十二届蓝桥杯省赛C&C 研究生组-路径 第十二届蓝桥杯省赛C&C 研究生组-时间显示 第十二届蓝桥杯省赛C&C 研究生组…...

Ubuntu自启GUI程序

问题描述 最近搞了一个项目&#xff0c;程序需要自动启动&#xff0c;系统是Ubuntu&#xff0c;先搞了成服务方式(配置的文章很多&#xff0c;可以自己找找)&#xff0c;程序还是不启动 &#xff0c;最后加到/etc/rc.local文件里面启动&#xff0c;看调试信息&#xff0c;需要…...

【光标精灵】让您享受鼠标皮肤多样化快捷更换

鼠标作为我们日常使用频率最高的“小伙伴”&#xff0c;扮演着至关重要的角色。尤其是在女生群体中&#xff0c;对于打造一个个性化、可爱的电脑桌面和软件界面的需求日益增长。然而&#xff0c;尽管电脑默认提供了一些可更换的光标图案&#xff0c;但仍显得有些单调和呆板。想…...

Vue 常见面试题(一)

目录 1、Vue 的最大的优势是什么&#xff1f;&#xff08;必会&#xff09; 2、Vue 和 jQuery 两者之间的区别是什么&#xff1f;&#xff08;必会&#xff09; 3、MVVM 和 MVC 区别是什么&#xff1f;哪些场景适合&#xff1f;&#xff08;必会&#xff09; 1、基本定义 2…...

Elasticsearch 的 scroll API

对于大量数据&#xff0c;可以使用 Elasticsearch 的 scroll API 来分批次地读取数据&#xff0c;以避免一次性读取所有数据造成的内存负担。这段代码使用滚动查询&#xff08;scroll&#xff09;来分批次地读取数据。首先&#xff0c;它发送初始的搜索请求&#xff0c;并获取第…...

Leedcode刷题——2 字符串

注&#xff1a;以下代码均为c 1. 反转字符串 void reverseString(vector<char>& s) {int n s.size();int i, j;for(i 0, j n - 1; i < j; i, j--){swap(s[i], s[j]);}}2. 整数反转 int reverse(int x) {int rev 0;while(x ! 0){if(rev < INT_MIN / 10 || …...

2016年认证杯SPSSPRO杯数学建模B题(第二阶段)多帧图像的复原与融合全过程文档及程序

2016年认证杯SPSSPRO杯数学建模 B题 多帧图像的复原与融合 原题再现&#xff1a; 数码摄像技术被广泛使用于多种场合中。有时由于客观条件的限制&#xff0c;拍摄设备只能在较低的分辨率下成像。为简单起见&#xff0c;我们只考虑单色成像。假设成像的分辨率为 32 64&#x…...

WMI接口设计实现

WMI是Windows操作系统管理数据和操作的基础设施&#xff0c;系统管理员可以使用VB Script、PowerShell及Windows API&#xff08;C、C#等&#xff09;管理本地或远程计算机。 使用WMI框架应用程序可以直接访问EC RAM、 I/O端口、Memory地址、寄存器、Setup NV设定值&#xff0c…...

前端项目,个人笔记(二)【Vue-cli - 引入阿里矢量库图标 + 吸顶交互 + setup语法糖】

目录 1、项目中引入阿里矢量库图标 2、实现吸顶交互 3、语法糖--<script setup> 3.1、无需return 3.2、子组件接收父组件的值-props的使用 3.3、注册组件 1、项目中引入阿里矢量库图标 步骤一&#xff1a;进入阿里矢量库官网中&#xff1a;iconfont-阿里巴巴矢量…...

OpenCV 介绍使用

返回&#xff1a;OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇:OpenCV4.9.0开源计算机视觉库使用简要说明 下一篇: OpenCV&#xff08;开源计算机视觉库&#xff1a;http://opencv.org&#xff09;是一个开源库&#xff0c;包含数百种计算机视觉算法。…...

Python 10个面试题实例

当然&#xff01;以下是10个Python面试题及其示例解决方案的中题目&#xff1a; 1.反转字符串: string "Hello, World!" reversed_string string[::-1] print(reversed_string)2.检查字符串是否为回文: def is_palindrome(string):return string string[::-1]r…...

Python:熟悉简单的skfuzzy构建接近生活事件的模糊控制器”(附带详细注释说明)+ 测试结果

参考资料&#xff1a;https: // blog.csdn.net / shelgi / article / details / 126908418 ————通过下面这个例子&#xff0c;终于能理解一点模糊理论的应用了&#xff0c;感谢原作。 熟悉简单的skfuzzy构建接近生活事件的模糊控制器 假设下面这样的场景, 我们希望构建一套…...

机器学习赋能6G近场通信:从信道估计到波束赋形的智能革命

1. 项目概述&#xff1a;当6G遇见近场&#xff0c;为何机器学习成为破局关键&#xff1f;如果你关注过5G到6G的技术演进路线&#xff0c;会发现一个核心趋势&#xff1a;天线阵列的规模正在从“大规模”走向“极大规模”。这不仅仅是数量的堆砌&#xff0c;更是通信物理原理的一…...

百考通智能任务书:贴合你的选题,拒绝空话假大空

毕业设计任务书是高校教学管理中的关键环节&#xff0c;它不仅标志着研究工作的正式启动&#xff0c;更是后续开题、实施、论文撰写和答辩全过程的行动依据。然而&#xff0c;许多学生在撰写时常常因不熟悉本专业写作规范、技术表达能力有限&#xff0c;或缺乏权威模板参考而陷…...

免费抓包工具选型指南:Wireshark、Fiddler、mitmproxy、Charles实战对比

1. 抓包工具不是“黑科技”&#xff0c;而是网络世界的显微镜很多人第一次听说“抓包”&#xff0c;脑子里立刻浮现出黑客电影里满屏滚动的绿色代码、键盘敲得噼啪作响、三秒破解银行防火墙的画面。其实完全不是这样——抓包&#xff08;Packet Capture&#xff09;本质上就是把…...

基于Arduino与433MHz射频的智能灯光定时系统设计与实现

1. 项目概述&#xff1a;告别机械定时器&#xff0c;打造智能灯光管家家里前后院的照明&#xff0c;还有出门度假时屋内的几盏灯&#xff0c;过去一直靠四个老旧的机械定时器来管理。说实话&#xff0c;这玩意儿用起来真是费劲。它的核心问题在于“死板”——你设定好晚上7点开…...

人工智能的伦理与安全:这3个问题,软件测试从业者必须重视

随着大语言模型、生成式AI的爆发式落地&#xff0c;人工智能已经从实验室走向千行百业的生产场景&#xff0c;深刻改变着软件开发与交付的逻辑。对于直接把控产品质量关口的软件测试从业者来说&#xff0c;我们的职责早已不再是单纯验证功能可用性、排查性能bug那么简单——AI系…...

MPC Video Renderer终极指南:如何在Windows上实现专业级视频渲染体验

MPC Video Renderer终极指南&#xff1a;如何在Windows上实现专业级视频渲染体验 【免费下载链接】VideoRenderer Внешний видео-рендерер 项目地址: https://gitcode.com/gh_mirrors/vi/VideoRenderer MPC Video Renderer是一款专为Windows平台设计…...

AI 如何改变软件工程:Martin Fowler 视角 + 实战洞见

AI 如何改变软件工程&#xff1a;Martin Fowler 视角 实战洞见 AI&#xff08;尤其是 LLM&#xff09;是软件工程自高级语言&#xff08;从汇编到 C/Fortran&#xff09;以来最大的转变。它引入了非确定性&#xff08;Non-deterministic&#xff09;编程&#xff0c;改变了从编…...

全方位梳理 OpenClaw 部署与使用干货

OpenClaw 一键安装包&#xff5c;可视化部署&#xff0c;简化环境配置流程 ✨适配系统&#xff1a;Windows10/11 64 位 当前版本&#xff1a;v2.7.5&#xff08;虾壳云版&#xff09; ✨核心优势&#xff1a;全程可视化操作&#xff0c;不用命令行、不用手动配置 Python/Node…...

免费解锁AMD Ryzen隐藏性能:SMUDebugTool终极指南

免费解锁AMD Ryzen隐藏性能&#xff1a;SMUDebugTool终极指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gitcod…...

PDF差异对比神器diff-pdf:告别文档核对烦恼,提升工作效率的智能解决方案

PDF差异对比神器diff-pdf&#xff1a;告别文档核对烦恼&#xff0c;提升工作效率的智能解决方案 【免费下载链接】diff-pdf A simple tool for visually comparing two PDF files 项目地址: https://gitcode.com/gh_mirrors/di/diff-pdf 你是否曾在核对PDF文档时感到头疼…...