递归的重要性不言而喻,它是很多算法实现的基础,比如含有分治思想的算法(归并排序,二分查找),有关遍历二叉树的算法,或者求解数学递推式的算法(斐波那契数列,n的阶乘),回溯法,动态规划等等, 一提到递归总有点发蒙,理论上比较好理解,但是一遇到复杂一点的递归算法,在大脑中很难想象递归在计算机中是怎么实现的。跟着一步步debug才终于搞明白,所以在这里先把过程给记录下来。
归并排序算法:就是运用分治的思想,把排序的过程变为先把数组分成左右两个部分,分别排序,再将排好序的两个数组合并成一个有序数组。
代码:
void Merge(vector<int>& inputArray, int p, int q, int r)
{
int i = p;
int j = q + 1;
vector<int> temp;
while (i <= q && j <= r)
{
if (inputArray[i] <= inputArray[j]) {
temp.push_back(input