c - 分而治之平均

标签 c arrays average divide-and-conquer

首先,问题不直接与算法有关(至少我认为我明白了);每当我使用求平均值的函数时,问题就会出现。

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

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

因此,对于该程序: 尝试使用分治法获得数组的平均值。我将数组除以二,然后继续,直到数组中只有 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;
}

最佳答案

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

关于c - 分而治之平均,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46626082/

相关文章:

32 位保护模式下的控制台输入

c - 如何在 C 中获取 pthread 名称

javascript - 使用 math.random 随机排列数组

javascript - 根据嵌套对象数组的深度生成节点号

java - 如何使用字节数组从 String.format 获取格式化字符串?格式化字符串具体意味着什么?

mysql - 从同一张表中获取记录数时如何编写mysql innerquery

python - 简单滚动平均值 - 前几个值

c - 如何访问结构数组中的值

c - 为什么我无法打开文件?

python - 如何找到数据帧行的平均值?