递归(Recursive
)
1、采用递归的思考方式
所有的递归方法都具有以下特点:
☛ 使用 if-else
或 switch
语句来引导不同的情况
☛ 一个或多个基础情况(最简单的情况)用来停止递归
☛ 每次递归调用都会简化原始问题,让它不断地接近基础情况,直到它变成这种基础情况为止。
2、递归辅助方法
有时候可以通过针对要解决的初始问題的类似问題定义一个递归方法,来找到初始问題的解决方法。这个新的方法称为递归辅助方法。
初始问题可以通过调用递归辅助方法来得到解决。
在递归程序设计中定义第二个方法来接收附加的参数是一个常用的设计技巧。这样的方法称为递归辅助方法(recursive helper method
)。
3、应用
3.1 递归选择排序
步骤:
- 先找到列表的最小数,并和第一个元素交换,
- 然后,在剩余的数中找到最小数,再将它和剩余列表中的第一个元素交换,
- 这样的过程一直进行下去,直到列表中仅剩一个数为止。
这个问题可以分解为两个子问题:
- 找出列表中的最小数,然后将它与第一个数进行交换。
- 忽略第一个数,对余下的较小一些的列表进行递归排序。
假设第一个数为Min
,下标为indexOfMin
。
3.2 递归二分査找
使用二分査找的前提条件是数组元素必须已经排好序。
二分査找法首先将关键字与数组的中间元素进行比较,考虑下面三种情况。
- 情况1: 如果关键字比中间元素小,那么只需在前一半数组元素中进行递归査找。
- 情况2: 如果关键字和中间元素相等,则匹配成功,査找结束。
- 情况3: 如果关键字比中间元素大,那么只需在后一半数组元素中进行递归査
找。