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. 使用递归算法实现折半查找