划分和征服平均数

问题描述 投票:0回答:1

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

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

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

因此,对于程序:尝试使用分而治之来获得数组的平均值。我将数组除以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;
}
c arrays average divide-and-conquer
1个回答
1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.