我正在运行一个递归程序,该程序获取一个数组,打印出数组中的所有值,对这些值求和,并取这些值的平均值,但是这些值未求和。
int sum(int Arr[], int num)
{
int x = 0;
int ans;
if (x == num - 1)
ans = Arr[x];
else
ans = Arr[x] + sum(Arr, x + 1);
return (ans);
}
如果我输入值1、2、3,我应该得到6的平均值和3.00的平均值,但是我得到2的平均值和0.00的平均值。
答案 0 :(得分:0)
具有1个元素的数组的总和(和平均值)就是该元素
if (n == 1) {
return a[0];
}
否则,sum是添加到数组其余部分之和的第一个元素
return a[0] + sum(a+1, n-1);
现在,您知道递归方法的总和,您已经知道有多少个元素,因此只需除以得到平均值
avg = sum(a, n) / n;
在一起
#include <stdio.h>
double sum(double *arr, size_t n) {
if (n == 1) return *arr;
return *arr + sum(arr + 1, n - 1);
}
int main(void) {
double x[] = {3.14159, 2.71828182, -1, 0.0000042, 2019};
double ss = sum(x, 5);
printf("sum: %g; avg %g\n", ss, ss / 5);
}
答案 1 :(得分:0)
#define ARR_SIZE 3
int sum(int Arr[], int index\*starting from 0*\)
{
int ans;
if (index == SIZE - 1)
ans = Arr[index];
else
ans = Arr[index] + sum(Arr, index + 1 );
return (ans);
}
如果还有其他问题,请评论,祝你好运!