Как правильно суммировать элементы массива - PullRequest
0 голосов
/ 10 мая 2019

Я запускаю рекурсивную программу, которая принимает массив, распечатывает все значения в массиве, суммирует значения и принимает среднее значение, но значения не суммируются.

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

Ответы [ 2 ]

0 голосов
/ 20 мая 2019
#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);
}

Прокомментируйте, если у вас есть еще вопросы, удачи!

0 голосов
/ 10 мая 2019

Сумма (и средняя) массива с 1 элементом равна этому элементу

if (n == 1) {
    return a[0]; 
}

в противном случае сумма - это первый элемент, добавленный к сумме остальной части массива

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);
}

см. код, работающий на idone

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...