| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 递归的使用(Java) -> 正文阅读 |
|
[数据结构与算法]递归的使用(Java) |
目录 一、生活中的实例
? ? ? ? ? 这个例子有一个明显的特征:自身中包含了自己,有时候,我们遇到的问题直接并不好解决,但是发现将原问题拆分成其子问题之后,子问题与原问题有相同的解法,等子问题解决之后,原问题就迎刃而解了。 二、概念? ? ? ? ?递归:一个方法在执行过程中调用自身,就称为"递归". ? ? ? ? ?使用场景:把一个较为复杂的原问题层层转化为与原问题相似的规模较小的问题。 ? ? ? ? ?优点:代码简洁。 ? ? ? ? ?缺点:难以理解。 ? ? ? ? ?示例:求N的阶乘。
三、实现条件? ? ? ? ? 从上面求N的阶乘的例子中,可以看出要实现递归,必须满足: ? ? ? ? ? ?1、要对原问题进行拆分,拆分成一个个小的问题,且小问题与大问题解法相同。 ? ? ? ? ? ?2、要有递归的出口。 四、常见表现方式? ? ? ? ? 1、问题本身递归 ? ? ? ? ? 2、数据结构递归 ? ? ? ? ? 3、概念递归 五、执行过程分析? ? ? ? ? 以4的阶乘为例: ? ? ? ? ? ? ? ? 执行过程图:顺序为1-6。 ? ? ? ? ? ?从栈帧的角度来看:顺序为1-10。其中1-5是为每个方法创建栈帧,6-10为得到返回值后栈帧的销毁。从中也可以看出递归算法的本质。 六、练习? ? ? ? ? 1.按顺序打印一个数字的每一位:
? ? ? ? ?2.求斐波那契数列第N位,这里值得思考的是,求斐波那契数列第N位用递归算法是效率很低的,因为当位数比较大时,会进行多次重复运算,如果用循环方法,就可以解决运算冗余的问题。
3.计算1-n的和
Over!!!? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 1:28:42- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |