划分并征服平均数

时间:2017-10-07 23:27:23

标签: c arrays average divide-and-conquer

首先,问题不在于算法(至少我认为我得到了它);每当我使用找到平均值的函数时,问题就会显示出来。

代码编译但是当我到达所述函数执行的行时,程序停止工作,可能是因为我正在使用数组,或者可能是因为执行需要多长时间(尽管我非常怀疑)这是最后一个)。

如果有人可以请告诉我问题出在哪里:

所以,对于该计划: 尝试使用分而治之来获得阵列的平均值。我将数组除以2,然后继续,直到我只有数组的1个元素并返回该值,否则,返回(avg(数组的最左边部分)+ avg(数组的最右边部分))/ 2。

#include <stdio.h>
#include <stdlib.h>

int avg(int in, int end, int* a){
    if ((end - in) == 0){
        return a[end];
    }
    return (avg(in, ((end - in)/2)-1, a) + avg((end - in)/2, end, a));
}

int main(){
    int a,*b,i;
    printf("Please say how long the array is going to be: ");
    scanf("%d",&a);
    b = (int*)malloc(sizeof(int) * a);
    if (b){
        for(i=0; i<a; ++i){
            printf("Please enter the element number %d of the array: ", i+1);
            scanf("%d",&b[i]);
        }
        printf("The array is:\n\n{\n");
        for(i=0; i<a; ++i){
            printf(" %d\n", b[i]);
        }
        printf("}\n\n");
        printf("The array's average is : %d", avg(0, a-1,b));
    }
    else{
        printf("Sorry, but an array of that size can't be created!\n");
    }

    return 0;
}

1 个答案:

答案 0 :(得分:1)

乍一看,您还没有处理2元素数组的情况。如果in = 0且end = 1,那么它将调用avg(-1,0,a)...因为整数,1/2 = 0。