递归函数调用自身的过程有点类似于伪代码,用一个简单的函数来代表对一个复杂问题的求解
递归函数会通过不断地调用自己或者以其他形式 降低 问题规模或者问题的复杂性
当问题的规模或复杂性降低到一个比较容易处理的部分时,停止递归过程,改用直接的方式来处理这个小规模或者低复杂性的问题
在进行递归调用时,我们不需要考虑函数调用自己到底是怎么样一个过程,我们只需要把它当作一个黑盒,了解其传入的参数和使用的功能即可。
以折半查找为例:
我们假设折半查找的函数biSearch接受三个参数,分别是被查找的数组,以及表示查找边界上下限的两个量,返回值为目标值的位置,查找失败时返回-1,则biSearch的原型如下:
int biSearch(int * arr, int le, int ri);
在函数体之中,我们首先判断,情况是否复杂,如是否le <= ri
如果情况简单,则直接处理,这里的简单情况对应着查找失败,我们返回-1(当然,对于这个简单的情形,我们也可以判断le 和 ri之间的差值,倘若较小,我们可以采用顺序查找)
如果情况仍然复杂,则仍旧以伪代码的形式处理,我们在mid + 1, ri或者le, mid - 1所在的区间之中,继续进行二分查找。