用二分递归求数组之和代码如下
#include<iostream>
using namespace std;
const int N = 1000;
int a[N];
int sum(int A[], int lo, int hi) {
if (lo == hi) return A[lo];
int mi = (lo + hi) >> 1;//>>1相当于除以2
return sum(A, lo, mi) + sum(A, mi + 1, hi);
}
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> a[i];
}
cout << sum(a, 0, n - 1) << endl;
return 0;
}
分析复杂度:
- 递归跟踪法
统计所有递归实例需要的时间总和
几何级数的总和与末项同阶
底层递实例总数为n,每一个递归实例复杂度为O(1) - 递推角度