2.1 递归

递归(recursion)是一种常见的解决问题的方法,即把问题逐渐简单化。递归的基本思想就是“自己调用自己”,一个使用递归技术的方法将会直接或者间接的调用自己。利用递归可以用简单的程序来解决一些复杂的问题。比如:斐波那契数列的计算、汉诺塔、快速排序等问题。

【示例4】使用递归实现n!

public 

递归的调用过程。

【示例5】使用递归实现斐波那契数列

斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)。

public 

递归问题的特点

一个问题可被分解为若干层简单的子问题

子问题和其上层问题的解决方案一致

外层问题的解决依赖于子问题的解决

递归结构包括两个部分:

递归结束条件:什么时候不调用自身方法。如果没有条件,将陷入死循环。

递归体。解答:什么时候需要调用自身方法。

递归的优点

自然的思路,简单的程序

递归的缺点

但是递归调用会占用大量的系统堆栈,内存耗用多,

在递归调用层次多时速度要比循环慢的多

2.2 折半查找

折半查找又称为二分查找,这种查找方法需要待查的查找表满足两个条件:

首先,查找表必须使用顺序存储结构;

其次,查找表必须按关键字大小有序排列。

key=21的查找过程

key=85的查找过程

【示例6】非递归的折半查找

public 

【示例7】递归的折半查找

public 

本节重点

1. 使用递归实现n!

2. 使用递归实现斐波那契数列

3. 使用非递归算法实现折半查找

4. 使用递归算法实现折半查找

java 递归_两篇文章带你了解java基础算法之递归和折半查找相关推荐

  1. 折半查找递归算法_两篇文章带你了解java基础算法之递归和折半查找

    2.1 递归 递归(recursion)是一种常见的解决问题的方法,即把问题逐渐简单化.递归的基本思想就是"自己调用自己",一个使用递归技术的方法将会直接或者间接的调用自己.利用递 ...

  2. java学习 类变量 类方法_这篇文章主要介绍了JAVA类变量及类方法代码实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下类变量(...

    这篇文章主要介绍了JAVA类变量及类方法代码实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 类变量(static) 类变量是该类的所有对象共 ...

  3. synchronized()_这篇文章带你彻底理解synchronized关键字

    Synchronized关键字一直是工作和面试中的重点.这篇文章准备彻彻底底的从基础使用到原理缺陷等各个方面来一个分析,这篇文章由于篇幅比较长,但是如果你有时间和耐心,相信会有一个比较大的收获,所以, ...

  4. 两篇文章带你走入.NET Core 世界:CentOS+Kestrel+Ngnix 虚拟机先走一遍(一)

    背景: 上一篇:ASP.Net Core on Linux (CentOS7) 共享第三方依赖库部署 已经交待了背景,这篇就省下背景了. 折腾的过程分两步: 第一步是:本机跑虚拟机部署试一下: 第二步 ...

  5. 两篇文章带你搞懂GC垃圾回收之基础篇

    文章目录 1.JVM GC回收哪个区域的垃圾? 2.判断对象可以回收的方法 2.1 引用计数法 2.2 可达分析算法 2.3 什么对象可以当作GC Roots? 虚拟机栈中的引用对象 全局的静态的对象 ...

  6. 什么是Apache Spark?这篇文章带你从零基础学起

    导读:Apache Spark是一个强大的开源处理引擎,最初由Matei Zaharia开发,是他在加州大学伯克利分校的博士论文的一部分.Spark的第一个版本于2012年发布. Apache Spa ...

  7. 饥荒机器人怎么解锁_这篇文章带你了解饥荒机器人

    在饥荒这款游戏当中,很多玩家对于里面的一些人物都还是比较了解的,但是唯独是机器人这个角色,是很多饥荒的玩家们都无法了解的人物,不了解他的相关技能,也不知道有关于这个角色的特殊之处,所以为了给大家解决一 ...

  8. java 路由器_一篇文章,了解清楚路由器的各种组网

    很多朋友问到,关不同网段的两个电脑如何实现互访?这个通常在企业办公中会遇到,我们今天来看下. 我们经常会遇到企业随着员工或部门的增多,增加了一个路由器,分了两个网段,A子网和B子网处于不同网段,当网络 ...

  9. C++/JAVA 计算两篇文章的相似度

    C++/JAVA 计算两篇文章的相似度 这位少侠,要不要进店瞧瞧? 实验介绍及思路 问题描述: 编写程序,计算任意两篇文章的相似度. 基本思路: 利用余弦相似度来计算其相似度. 完整代码 C++ 代码 ...

最新文章

  1. 利用CxImage实现编解码Gif图像代码举例
  2. 在对话框中应用CScrollView显示图像
  3. zynq学习04 zynq中PS通过MIO控制LED
  4. SSL/TLS 协议简介与实例分析
  5. 题目2:隐式图的搜索问题(A*算法解决八数码)代码实现
  6. 联想微型计算机 m4350q,比超极本便携 评联想M4350q小型台式机
  7. 在Arcmap中加载互联网地图资源的4种方法
  8. 高颜值可定制在线绘图工具
  9. 学习ssm框架的顺序
  10. 妈妈别哭,我去了天堂[组图]【值得你去看,值得你去深思】
  11. Linux面试题,经典Linux面试题,常见Linux面试题带答案
  12. 微信小程序使用阿里字体图标库的方法
  13. Shopee卖家如何布局产品合理定价,新手必知的定价策略
  14. pyqt5 设置按钮圆角
  15. BERT如何解决一词多义问题
  16. 服务化系统容量评估和性能保障
  17. uniapp跨域设置
  18. 互联网年底裁员,离职倒计时!!!
  19. 利用tushare绘制投资组合可行集python代码
  20. 对话Nodebrick创始人:区块链游戏需要更多玩家,韩国开发者偏保守

热门文章

  1. 7添加静态路由 hat red_不同VPC路由器通过静态路由、动态路由(OSPF)实现网络互通实战...
  2. java模拟时间_使用生成器模拟时间分片
  3. 水仙花数 java 1 100_Java练习题1:找出100——999数中的所有水仙花数
  4. Java 算法 聪明的美食家
  5. python计算两个时间间隔准确的天、月、年之差
  6. python给列表的每一项都加上特定的字符串
  7. docker 配置selenium调用Firefox无界面浏览器
  8. Mac 解决 command not found: mysql
  9. java 调用打印机 api_java 调用打印机API无法打印,但是直接打印可以,请问有人遇到过这样的问题吗?...
  10. python发送文件_python:socket传输大文件