C 为什么这些函数具有不同的时间复杂性?

C 为什么这些函数具有不同的时间复杂性?,c,time-complexity,mergesort,C,Time Complexity,Mergesort,我知道mergeSort函数采用Ologn,merge函数采用Ologn,因此总的复杂度仅为Onlogn void mergeSort(int arr[], int l, int r){ if(l >= r){ return; } int m = (l + r) / 2; mergeSort(arr, l, m); mergeSort(arr, m+1, r); merge(arr, l, m, r); } 现在让我们假

我知道mergeSort函数采用Ologn,merge函数采用Ologn,因此总的复杂度仅为Onlogn

void mergeSort(int arr[], int l, int r){
    if(l >= r){
        return;
    }
    int m = (l + r) / 2;
    mergeSort(arr, l, m);
    mergeSort(arr, m+1, r);
    merge(arr, l, m, r);  
}
现在让我们假设我使用相同的逻辑来实现以下数组元素和的代码

int arraySum(int arr[], int l, int r){
    if(l == r){
        return arr[l];
    }
    int mid = (l + r) / 2;
    int one = arraySum(arr[], l, mid);
    int two = arraySum(arr[], mid + 1, r);
    return one + two;
}
现在,这个arraySum函数与mergeSort函数相同,只是合并部分不同。 那么,arraySum的时间复杂性不应该是Ologn吗。但我知道这是不可能的,因为有n个元素,每个元素都是在O1中访问的,并且必须打开。 现在我对这两种逻辑感到困惑。
为什么mergeSort采用Ologn[忽略合并函数],而此arraySum采用,即使它们相同。

arraySum的时间复杂度为On,而mergeSort的时间复杂度为logn。请注意|的每个实例都返回1+2;|具有复杂性O1,而| mergearr,l,m,r;|的每个实例具有复杂性或-l


对于n个元素,arraySum将执行n-1次添加,而mergeSort将执行n次添加⌈log2n⌉ 移动。

arraySum的时间复杂度为On,而mergeSort的时间复杂度为logn。请注意|的每个实例都返回1+2;|具有复杂性O1,而| mergearr,l,m,r;|的每个实例具有复杂性或-l

对于n个元素,arraySum将执行n-1次添加,而mergeSort将执行n次添加⌈log2n⌉ 移动