首先,问题不在于算法(至少我认为我得到了它);每当我使用找到平均值的函数时,问题就会显示出来。
代码编译但是当我到达所述函数执行的行时,程序停止工作,可能是因为我正在使用数组,或者可能是因为执行需要多长时间(尽管我非常怀疑)这是最后一个)。
如果有人可以请告诉我问题出在哪里:
所以,对于该计划: 尝试使用分而治之来获得阵列的平均值。我将数组除以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;
}
答案 0 :(得分:1)
乍一看,您还没有处理2元素数组的情况。如果in = 0且end = 1,那么它将调用avg(-1,0,a)...因为整数,1/2 = 0。