线性递归
int sum(int *a, int n)
{
return (n < 1) ? 0 : sum(a, n - 1) + a[n - 1];//数组下标从0开始
}
递归过程如下
二分递归
int sum2(int *a, int lo, int hi)
{
if (lo == hi)
return a[lo];
int mid = lo + (hi - lo) / 2;
return sum2(a, lo, mid) + sum2(a, mid + 1, hi);
}
假设一个长度为8的数组,其递归过程如下所示
这两者的复杂度都是O(n);
参考
1. MOOC 数据结构课程 PPT 邓俊辉