2.1 递归

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




java实现一个有次数的递归调用 用java实现递归算法_斐波那契数列


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


public


递归的调用过程。


java实现一个有次数的递归调用 用java实现递归算法_折半查找_02


【示例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


递归问题的特点

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

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

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

递归结构包括两个部分:

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

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

递归的优点

自然的思路,简单的程序

递归的缺点

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

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


java实现一个有次数的递归调用 用java实现递归算法_递归_03


2.2 折半查找

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

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

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

key=21的查找过程


java实现一个有次数的递归调用 用java实现递归算法_折半查找_04


key=85的查找过程


java实现一个有次数的递归调用 用java实现递归算法_斐波那契数列_05


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


public


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


public


本节重点

1. 使用递归实现n!

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

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

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