[C语言]不创建累加器sum变量,如何求一个数组的长度?

线性递归

int sum(int *a, int n)
{
    return (n < 1) ? 0 : sum(a, n - 1) + a[n - 1];//数组下标从0开始
}

递归过程如下
[C语言]不创建累加器sum变量,如何求一个数组的长度?_第1张图片

二分递归

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的数组,其递归过程如下所示
[C语言]不创建累加器sum变量,如何求一个数组的长度?_第2张图片

这两者的复杂度都是O(n);


参考
1. MOOC 数据结构课程 PPT 邓俊辉

你可能感兴趣的:([C语言]不创建累加器sum变量,如何求一个数组的长度?)