做一些c语言知识的基础练习题,遇到一个代码题,要求递归计算数组和,当时手写一个代码,但端点值没有处理好,后又重新写代码进行验证。(在网上看到的代码大都是将数组的长度依次递减,而不是采用二分的方法)
#include<stdio.h>
int sum(int arr[], int l, int r) {
if (l == r)
return arr[l];
return sum(arr, l, (l+r) / 2)+sum(arr, (l + r) / 2 + 1, r);
//右区间左端点比左区间右端点大1
}
int main() {
int arr[] = { 1,2,3,4,5 };
printf("%d\n", sum(arr, 0, 4));
int arr2[] = { 1,2,3,4,5,6 };
printf("%d\n", sum(arr2, 0, 5));
return 0;
}